w3wp进程发生死锁ISAPI '..\aspnet_isapi.dll' 报告它自身有问题,原因'Deadlock detected'

ISAPI 'c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll' 报告它自身有问题,原因如下: 'Deadlock detected'

这个问题,字面意思是程序发生死锁了,它会导致w3wp进程重启。通常这个问题不好查到原因。我知道两个可能导致此问题的实例

1. 在程序中使用了lock或者ReaderWriterLock,锁资源发生了争用
下面是一小段代码:

//_rwLock的类型是ReaderWriterLock
_rwLock.AcquireWriterLock(100);
DoSomething();
_rwLock.ReleaseWriterLock();

 这行代码是有问题的,如果在DoSomething()方法执行中发生一次异常,这个写锁就释放不了了,再次请求时就会等待直到超时,在多线程的情况下就会发生死锁'Deadlock detected'
 正确的写法应该是:

try
{
    _rwLock.AcquireWriterLock(100);
    DoSomething();
}
finally
{
    if (_rwLock.IsWriterLockHeld)
        _rwLock.ReleaseWriterLock();
}

 这样就算在DoSomething方法执行时发生了异常,也可以释放写锁。

2. 数据库连接的超时时间设置的很长而在设定的超时时间之内连接耗尽了,再次要求打开数据库连接时也可能会出现此问题。这个是数据库连接串的配置问题,超时时间要设置的适当,不要过长。

发生这个问题时的日志写的很笼统:
ISAPI 'c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll' 报告它自身有问题,原因如下: 'Deadlock detected'。

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

这样导致不容易找到问题发生在哪块,所以我记录两种发生此问题的实例,希望有用。

我的微博地址是:http://weibo.com/yukaizhao 我会把一些技术心得碎片写到微博中,欢迎关注。
标签: iis, deadlock
posted @ 2010-08-25 17:45 玉开 阅读(2168) 评论(8) 编辑 收藏

 回复 引用 查看   
#1楼2010-08-25 18:22 | 小青青      
飘过~~
 回复 引用 查看   
#2楼2010-08-25 18:38 | 迭_戈      
此文不错,值得推荐!
 回复 引用 查看   
#3楼2010-08-25 18:38 | 迭_戈      
飘过~~
 回复 引用 查看   
#4楼2010-08-25 18:52 | 昌盛      
此文不错,值得推荐!
 回复 引用 查看   
#5楼2010-08-25 18:53 | Keep Walking      
这种问题也发生在当你ftp你的dll的时候
 回复 引用 查看   
#6楼2010-08-25 22:45 | mild      
此文不错,值得推荐!
 回复 引用 查看   
#7楼2010-08-26 09:40 | mikel      
另外不可回收的资源的占用过多也会导致w3wp的重启
曾经因为生成验证码没有释放资源导致网站缓存被塞满,然后w3wp不定期的重启

 回复 引用 查看   
#8楼[楼主]2010-08-26 09:43 | 玉开      
引用Keep Walking:这种问题也发生在当你ftp你的dll的时候

谢谢提示

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1808378 zgCpCWkC7Dw=