w3wp進(jìn)程發(fā)生死鎖ISAPI aspnet_isapi.dll報(bào)告它自身有問題,原因Deadlock detected
1. 在程序中使用了lock或者ReaderWriterLock,鎖資源發(fā)生了爭(zhēng)用
下面是一小段代碼:
//_rwLock的類型是ReaderWriterLock
_rwLock.AcquireWriterLock(100);
DoSomething();
_rwLock.ReleaseWriterLock();
這行代碼是有問題的,如果在DoSomething()方法執(zhí)行中發(fā)生一次異常,這個(gè)寫鎖就釋放不了了,再次請(qǐng)求時(shí)就會(huì)等待直到超時(shí),在多線程的情況下就會(huì)發(fā)生死鎖'Deadlock detected'
正確的寫法應(yīng)該是:
try
{
_rwLock.AcquireWriterLock(100);
DoSomething();
}
finally
{
if (_rwLock.IsWriterLockHeld)
_rwLock.ReleaseWriterLock();
}
這樣就算在DoSomething方法執(zhí)行時(shí)發(fā)生了異常,也可以釋放寫鎖。
2. 數(shù)據(jù)庫連接的超時(shí)時(shí)間設(shè)置的很長而在設(shè)定的超時(shí)時(shí)間之內(nèi)連接耗盡了,再次要求打開數(shù)據(jù)庫連接時(shí)也可能會(huì)出現(xiàn)此問題。這個(gè)是數(shù)據(jù)庫連接串的配置問題,超時(shí)時(shí)間要設(shè)置的適當(dāng),不要過長。
發(fā)生這個(gè)問題時(shí)的日志寫的很籠統(tǒng):
ISAPI 'c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll' 報(bào)告它自身有問題,原因如下: 'Deadlock detected'。
有關(guān)更多信息,請(qǐng)參閱在 http://go.microsoft.com/fwlink/events.asp 的幫助和支持中心。
這樣導(dǎo)致不容易找到問題發(fā)生在哪塊,所以我記錄兩種發(fā)生此問題的實(shí)例,希望有用。
問題分析方法(這個(gè)很有必要的)
今天系統(tǒng)突然折了,但是問題在哪呢?很費(fèi)周折。
錯(cuò)誤信息:
ISAPI'c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll'報(bào)告它自身有問題,原因如下:'檢測(cè)到死鎖'。
有關(guān)更多信息,請(qǐng)參閱在http://go.microsoft.com/fwlink/events.asp的幫助和支持中心。
癥狀:系統(tǒng)總是不穩(wěn)定,一會(huì)能用,一會(huì)兒又死掉了。
分析過程:
這個(gè)版本已經(jīng)跑了很長時(shí)間,估計(jì)不是程序死鎖的問題。倒底是什么問題呢。應(yīng)該是外部環(huán)境的問題。由于錯(cuò)誤信息比較的抽象,之前沒有遇到過,所以google了下,但是好像遇到此問題的人很少,不過在博客園還是遇到一位受到同樣遭遇的人,但是并沒有一種很好的解決方案,也沒有確切的指出問題的癥結(jié)。所以只有自己進(jìn)行一些檢查。
<1>查看最近的系統(tǒng)更新,看是否有關(guān)于IIS之類的更新
<2>查看系統(tǒng)的殺毒軟件的日志文件,看是否收到了攻擊
但是,檢查上述兩個(gè)步驟,并沒有發(fā)現(xiàn)問題??聪到y(tǒng)是有一些更新,迫于無奈,只好重啟系統(tǒng)試一下(也順便重啟IIS)。重啟之后,問題依舊。
觀察進(jìn)程管理器,發(fā)現(xiàn):
W3WP的線程數(shù),一直在變化,一會(huì)增加一個(gè)高峰值,重新增加一個(gè)W3WP進(jìn)程,之前的進(jìn)程過一會(huì)就自動(dòng)關(guān)閉,一會(huì)又恢復(fù)正常。
這說明網(wǎng)站,在不斷的死亡、重啟。到底是哪里的問題呢?應(yīng)該還是系統(tǒng)自己的問題了。但是它自身的版本并沒有問題,為了確定這一點(diǎn),我也試了之前穩(wěn)定的版本,同樣出現(xiàn)此類問題。最后,是否是系統(tǒng)中調(diào)用的第三方服務(wù),將整個(gè)系統(tǒng)給拖死了呢?
罪魁禍?zhǔn)祝航?jīng)過檢查,果然是由于程序中實(shí)時(shí)調(diào)用了一個(gè)服務(wù),由于此服務(wù)已經(jīng)停止,請(qǐng)求無果,出現(xiàn)了死鎖。
教訓(xùn):
<1>最大大限度保證系統(tǒng)與第三方服務(wù)的穩(wěn)定、安全,并在請(qǐng)求過程中做超時(shí)判斷、消息分級(jí)處理。
<2>遇到問題,首先應(yīng)全面分析系統(tǒng)的問題可能性,因?yàn)橄到y(tǒng)本身的運(yùn)行環(huán)境一般都是固定不變的,出現(xiàn)問題的可能性很小。
有的時(shí)候在寫程序的時(shí)候,如果出了問題,首先應(yīng)該懷疑自己的思路、代碼哪里出了問題,而不應(yīng)該去怪罪IDE或者OS出了什么BUG。這樣你就少走很多彎路。
通過上邊的介紹,我出現(xiàn)此問題的原因是:(在此貼出備注一下)

首選我代碼里沒有用到加鎖代碼(例如:Application.Lock(), Application.UnLock()等);
其次在此問題之前,沒有出現(xiàn)過此問題,并且良好運(yùn)行過很長時(shí)間;
最后發(fā)現(xiàn),由于我代碼里調(diào)用c/c++ DLL, 而DLL里要鏈接網(wǎng)關(guān)服務(wù),然后網(wǎng)關(guān)服務(wù)此時(shí)沒有開啟,從而出錯(cuò),開啟DLL需要的網(wǎng)關(guān)服務(wù),就可以了。
- 問個(gè)高難度的復(fù)雜查詢(在一個(gè)時(shí)間段內(nèi)的間隔查詢)
- PHP syntax error, unexpected $end 錯(cuò)誤的一種原因及解決
- jQuery選中select控件 無法設(shè)置selected的解決方法
- php iconv() : Detected an illegal character in input string
- php異常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE eval()''d code error
- PHP Parse Error: syntax error, unexpected $end 錯(cuò)誤的解決辦法
- jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR錯(cuò)誤
- C++中的三種繼承public,protected,private詳細(xì)解析
- CodeIgniter框架提示Disallowed Key Characters的解決辦法
- PHP異常Parse error: syntax error, unexpected T_VAR錯(cuò)誤解決方法
- pycharm 使用心得(九)解決No Python interpreter selected的問題
- PHP錯(cuò)誤Parse error: syntax error, unexpected end of file in test.php on line 12解決方法
- 強(qiáng)制SQL Server執(zhí)行計(jì)劃使用并行提升在復(fù)雜查詢語句下的性能
- 深入理解C++中public、protected及private用法
- jQuery中:selected選擇器用法實(shí)例
- 在sqlserver中如何使用CTE解決復(fù)雜查詢問題
相關(guān)文章
win2003 服務(wù)器磁盤權(quán)限安全設(shè)置批處理
服務(wù)器磁盤權(quán)限安全設(shè)置批處理,比較方便配置服務(wù)器安全的朋友,默認(rèn)情況下磁盤沒有做任何權(quán)限設(shè)置,設(shè)置后就安全了很多2012-04-04windows 服務(wù)器自動(dòng)備份任務(wù)(批處理)
很久很久以前的資料了,現(xiàn)在整理一下分享出來。大家交流一下。也可以提取你需要的命令進(jìn)行使用,很多方法都是整理于網(wǎng)絡(luò),沒有版權(quán)什么的。隨便轉(zhuǎn)載。2013-01-01Windows x86/ x64 Ring3層注入Dll總結(jié)
這篇文章主要介紹了Windows x86/ x64 Ring3層注入Dll總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-10-10Windows Server 2016+Sql Server 2016搭建Alw
集群規(guī)劃節(jié)點(diǎn)加域重啟并用本地管理員賬戶重新登陸后,開始安裝故障轉(zhuǎn)移集群功能(WSFC),并創(chuàng)建故障轉(zhuǎn)移集群2023-05-05有了SSL證書,如何在IIS環(huán)境下部署https
這篇文章主要介紹了有了SSL證書,如何在IIS環(huán)境下部署https,需要的朋友可以參考下2017-03-03修改MaxFieldLength與MaxRequestBytes徹底解決Request Too Lo
當(dāng) IIS6/IIS7/7.5 收到的請(qǐng)求頭的長度超過16K(默認(rèn)值),就會(huì)引發(fā)"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的錯(cuò)誤2014-01-01Serv-U防溢出提權(quán)攻擊解決設(shè)置方法
本文將為大家介紹在如今Microsoft系列(Win2k Win2k3)SERVER中使用最為廣泛的FTP服務(wù)器之一、大名鼎鼎的Serv-U FTP服務(wù)器中如何簡(jiǎn)單地解決Overflow溢出、以及Hacker常用的Webhsell提升權(quán)限等類攻擊的隱患與缺陷;讀完本文,您將可以使您的 Serv-U服務(wù)器免去被溢出、被提升權(quán)限的安全威脅與危險(xiǎn)。2008-09-09windows server 2016 域環(huán)境搭建的方法步驟(圖文)
本文主要介紹了windows server 2016 域環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06利用Window自帶Ipsec安全策略對(duì)服務(wù)器進(jìn)行安全加固
這篇文章主要介紹了利用Window自帶Ipsec安全策略進(jìn)行安全加固,需要的朋友可以參考下2017-04-04