探讨由于死锁或进程阻塞造成的ASP突然不能访问的问题

王朝asp·作者佚名  2006-11-24
宽屏版  字体: |||超大  

现象:

很多次了,每当我在dc9.cn上安装上计数系统或者反向链接系统就会出现这种情况。现象是自己的空间突然间不能访问,仔细观察是只有ASP不能访问而静态页面却可以访问,FTP访问也正常,看上去好像是IIS假死。

询问:

首先我致电通联无限的客服,他们态度很好,说有可能是进程阻塞造成的服务器不能访问。果然他们帮我回收一下服务器资源就能访问了。

研究:

到底是什么造成了我的服务器突然死锁或进程阻塞呢?我研究了很久,最终得出的结论是:由于统计系统的访问量过大,同时查询更新数据库的人数太多,而造成了ASP突然不能访问。

那么现在的原因可能是这样:

由于每一次查询更新数据库都要向系统请求的资源,而所请求的资源没有及时关闭或者释放而造成了进程阻塞.

用户Q访问表A(锁住表A),然后又访问表B,此时用户W访问表B(锁住表B),然后企图访问表A,这时用户Q由于用户W已经锁住表B,Q必须等待用户W释放表B,才能继续,同样用户W要等用户Q释放表A才能继续,于是产生死锁。

就好比我把我家锁上了,然后拿着钥匙跑到你家,然后你把我反锁在了你家然后又企图进我家。这样我出不来你也进不去,于是就无限等待下去吧。

或者用户A读一条纪录E,然后修改该条纪录E,但没有锁定,此时用户B也修改该条纪录E的时候容易造成死锁。这主要是由于数据库的锁定类型设定不当,导致资源竞争严重,从而造成死锁.

拙见:

怎么解决呢?

1,我觉得就是要在程序中注意习惯性使用xxx.close:set xxx=nothing这样的语句,及时释放服务器资源。最开始我那个SXNA1.3就没有及时释放服务器资源而导致了好多的服务器出现假死。后来基本修正了的说。

2,我觉得是不是在数据库的锁定类型上尝试使用adLockPessimistic悲观锁定方式,因为conn.execute的默认锁定方式是ADLOCKREADONLY,这个在同时又大量的用户访问查询更新数据库的时候容易造成死锁。

3,使用MSMQ来控制ASP进程,解决进程死锁问题,这个在网络上有大量的教程,我就不赘述了。

总之造成这个问题的应该是程序的BUG。

我的解决方法是最最痛快的解决办法,不使用站内的统计,使用站外的统计.现在站外的免费流量统计也不错,反向链接也能看得很清楚,只不过需要点进去看而已。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有