最近協助處理一個很奇怪的問題:在 production 環境下的 ASP.NET 應用程式有時候會整個掛掉,而且連 IIS 也掛了(聽別人轉述的,我沒親眼見到)。作業系統是 Windows Server 2003 R2,.NET Framework 2.0 SP2。
從事件日誌裡面尋找可疑線索,發現在接近應用程式掛點的時間之前,事件日誌裡面都會有一筆警告訊息:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
Deadlock detected
然後從網路上找到對應的 KB 文章:http://support.microsoft.com/kb/974165
裡面有提到 hotfix,可是卻沒有提供任何下載 hotfix 的連結,而是要我們跟微軟連繫。我在網路上另外找到 for Windows 7 和 Windows 2008 的hotfix:http://support.microsoft.com/kb/983440,但就是沒有 for Windows 2003 Server 的。
於是,我用自己的 MSDN 訂閱帳戶嘗試跟微軟技術支援單位聯繫。無奈身在美國,線上等了三分鐘,對方說我必須與台灣微軟接洽。台灣現在還在放春假哩。
後來在某部落格看到有個方法可以直接下載這種官網未提供下載連結的 hotfix,只要使用以下連結:
http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=[文章編號]&kbln=zh-tw
把其中的 [文章編號] 換成對應的 KB 號碼,例如 974165,然後按照網頁中的指示就行了。
至於這個 hotfix 能不能解決我們碰到的問題,目前還不確定。若有結果,我會把整個問題的始末整理在另一篇網誌裡。
注意: 這些沒有公開發布的 hotfix,在安裝時要特別注意,你的電腦上很可能已經裝了某個更(四聲)新的 hotfix(例如 Windows Update 自動下載的 patch),導致這個 hotfix 安裝程式認為不需要更新,然後安靜地結束。我這次碰到的狀況就是這樣,安裝時沒有出現任何錯誤訊息,讓你誤以為安裝成功了。你可以仔細看 KB 文件中描述的,安裝完後的某些 DLL 檔案的版本號碼應該會變成多少,再去硬碟裡找到這些檔案,比對看看版本號碼(尤其是 build number)就知道有沒有真的安裝成功。當時由於不知道為什麼看起來安裝成功了,檔案版本卻沒變,最後只好 call 微軟技術支援。這才知道,原來要先移除某個相關的 hotfix,然後再安裝這個 hotfix,最後再把先前移除的 hotfix 再安裝回來....Orz。這些細微 hotfix 之間的先後和相依關係,恐怕也只有微軟的工程師才有辦法查到吧。
相關連結
從事件日誌裡面尋找可疑線索,發現在接近應用程式掛點的時間之前,事件日誌裡面都會有一筆警告訊息:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
Deadlock detected
裡面有提到 hotfix,可是卻沒有提供任何下載 hotfix 的連結,而是要我們跟微軟連繫。我在網路上另外找到 for Windows 7 和 Windows 2008 的hotfix:http://support.microsoft.com/kb/983440,但就是沒有 for Windows 2003 Server 的。
於是,我用自己的 MSDN 訂閱帳戶嘗試跟微軟技術支援單位聯繫。無奈身在美國,線上等了三分鐘,對方說我必須與台灣微軟接洽。台灣現在還在放春假哩。
後來在某部落格看到有個方法可以直接下載這種官網未提供下載連結的 hotfix,只要使用以下連結:
http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=[文章編號]&kbln=zh-tw
把其中的 [文章編號] 換成對應的 KB 號碼,例如 974165,然後按照網頁中的指示就行了。
至於這個 hotfix 能不能解決我們碰到的問題,目前還不確定。若有結果,我會把整個問題的始末整理在另一篇網誌裡。
注意: 這些沒有公開發布的 hotfix,在安裝時要特別注意,你的電腦上很可能已經裝了某個更(四聲)新的 hotfix(例如 Windows Update 自動下載的 patch),導致這個 hotfix 安裝程式認為不需要更新,然後安靜地結束。我這次碰到的狀況就是這樣,安裝時沒有出現任何錯誤訊息,讓你誤以為安裝成功了。你可以仔細看 KB 文件中描述的,安裝完後的某些 DLL 檔案的版本號碼應該會變成多少,再去硬碟裡找到這些檔案,比對看看版本號碼(尤其是 build number)就知道有沒有真的安裝成功。當時由於不知道為什麼看起來安裝成功了,檔案版本卻沒變,最後只好 call 微軟技術支援。這才知道,原來要先移除某個相關的 hotfix,然後再安裝這個 hotfix,最後再把先前移除的 hotfix 再安裝回來....Orz。這些細微 hotfix 之間的先後和相依關係,恐怕也只有微軟的工程師才有辦法查到吧。
相關連結
- IBM 網站也有一篇關於此問題的文件:https://www-304.ibm.com/support/docview.wss?uid=swg21567561
- MSDN 論壇上也有苦主碰到同樣的棘手問題:
http://social.microsoft.com/Forums/en-US/Offtopic/thread/3cd499bf-3db6-4749-8e24-c2d46b4ec3a6 - Google 搜尋關鍵字:2.0.50727.4066
- GDR 與 LDR/QFE hotfix 的差別
沒有留言: