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

80酷酷网    80kuku.com

  访问|进程|问题|进程

现象:

很多次了,每当我在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。

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

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: