探讨由于死锁或进程阻塞造成的ASP突然不能访问的问题
2006-03-08 09:46
387 查看
现象:
很多次了,每当我在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。
我的解决方法是最最痛快的解决办法,不使用站内的统计,使用站外的统计.现在站外的免费流量统计也不错,反向链接也能看得很清楚,只不过需要点进去看而已。
很多次了,每当我在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。
我的解决方法是最最痛快的解决办法,不使用站内的统计,使用站外的统计.现在站外的免费流量统计也不错,反向链接也能看得很清楚,只不过需要点进去看而已。
相关文章推荐
- 关于asp.net和iis的进程/线程问题,假如网站有1000个人访问,会产生多少个进程/线程啊
- 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
- xp下安装iis 不能访问asp,要求用户名密码问题
- Socket 通信中由 read 返回值造成的的死锁问题(socket 阻塞)
- 解决谷歌google不能访问造成wordpress打开缓慢的问题
- Windows Server 2003 asp网页不能访问的常见问题
- FreeLibrary造成死锁的问题探讨
- 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
- (iis,asp.net)Tip:错误"由于 ASP.NET 进程标识对全局程序集缓存没有读权限,因此未能执行请求。错误: 0x80070005 拒绝访问"的解决办法
- 第十篇:深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)
- H2 数据库,进程死锁导致访问异常的问题
- 解决一次由于SSL证书到期导致的网站不能访问的问题(Nginx,php,Apache)
- asp.net 2安装遇到问题的解决(由于无法创建应用程序域,因此未能执行请求。错误: 0x80070005 拒绝访问)
- 关于部署完asp.net程序后不能访问页面也不能连接数据库的问题
- [致歉]DNS服务器的问题造成网站不能正常访问
- javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨
- asp.net Forms验证跨域页面不能访问的问题
- 解决Process进程不能及时关闭及阻塞问题
- win8 ie10 输入https://localhost:1158/em 由于安全证书问题不能访问
- 关于ASP.NET访问ACCESS数据的“不能打开注册表关键字”80004005错误的探讨