如何解決win2003 sp2,iis6頻繁假死的問題?

如何解決win2003 sp2,iis6頻繁假死的問題?

問題描述:

大概每3天就會假死1次  
假死的時候在客戶機和服務器上,都無法訪問頁面,html和asp.net都無法訪問  
假死時iis服務是運行的  
重起iis服務也無法解決  
只能重起服務器,起了之後就OK,但是3天左右又死了  

如何解決假死呢?  
如果是補丁,請詳細給出補丁的鏈接  
如果是應用池,請詳細給出配置信息 

問題原因:

聽起來很像是NonPagedPool用完了,http.sys就無法接受http請求了,可以檢查一下IIS error log: %WIN_ROOT%\system32\LogFiles\HTTPERR\httperr#.log裏面有沒有下面的錯誤:
datetime - - - - - - - - - 1_Connections_Refused -

如果有的話,參考以下文章,很有可能你用了3GB,把它改回去就可以了
http://support.microsoft.com/kb/933844

實際上的log信息是:

2009-04-08 13:10:33 - - - - - - - - - 2_Connections_Refused -
2009-04-08 13:10:48 - - - - - - - - - 6_Connections_Refused -
2009-04-08 13:11:28 - - - - - - - - - 5_Connections_Refused -
2009-04-08 13:11:33 - - - - - - - - - 6_Connections_Refused -
2009-04-08 13:11:38 - - - - - - - - - 25_Connections_Refused -
2009-04-08 13:11:43 - - - - - - - - - 96_Connections_Refused -
2009-04-08 13:11:48 - - - - - - - - - 100_Connections_Refused -
2009-04-08 13:11:53 - - - - - - - - - 103_Connections_Refused -
2009-04-08 13:11:58 - - - - - - - - - 38_Connections_Refused -
2009-04-08 13:12:23 10.248.202.65 4021 10.255.43.200 80 - - - - - Timer_ConnectionIdle -
2009-04-08 13:14:23 10.250.162.55 61418 10.255.43.200 80 - - - - - Timer_ConnectionIdle -
2009-04-08 13:14:23 - - - - - - - - - 5_Connections_Refused -
2009-04-08 13:14:28 - - - - - - - - - 2_Connections_Refused -
2009-04-08 13:14:33 - - - - - - - - - 3_Connections_Refused -
2009-04-08 13:14:38 - - - - - - - - - 92_Connections_Refused -
2009-04-08 13:14:43 - - - - - - - - - 90_Connections_Refused -
2009-04-08 13:14:48 - - - - - - - - - 93_Connections_Refused -
2009-04-08 13:14:53 - - - - - - - - - 91_Connections_Refused -
2009-04-08 13:14:58 - - - - - - - - - 96_Connections_Refused -
2009-04-08 13:15:03 - - - - - - - - - 53_Connections_Refused -
2009-04-08 13:15:53 10.248.202.65 1377 10.255.43.200 80 - - - - - Timer_ConnectionIdle -
2009-04-08 13:17:23 - - - - - - - - - 21_Connections_Refused -
2009-04-08 13:17:28 - - - - - - - - - 15_Connections_Refused -

模擬解決問題步驟:

:我在你給的文章(http://support.microsoft.com/kb/933844)中看到需要修改boot.ini

[boot loader]
timeout=2
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect
C:\mxldr=MaxDOS V6

我沒看到3G開關啊

那麼說明你並沒有使用3GB,一定有什麼程序導致了Kernel Mode Memory leak。

打開任務管理器,在Performance選項卡上注意觀察Kernel Memory/Nonpaged的大小,是不是在持續增長。假設你的物理內存有4G,那麼在Windows 2003下面,默認的NonPagedPool的總大小約爲256MB,當它被使用到只剩下不到20MB的時候,就會出現你這個問題。如果物理內存小於4G,那麼這個數值又不一樣。

如果你從任務管理器裏面觀察到NonpagedPool使用比較大的時候,我們就可以確定你遇到的就是這個問題。在之前我提供給你的文章裏面有第二種方法:http://support.microsoft.com/kb/177415/
關鍵是我們需要找到誰在大量使用NonpagedPool。
如果你自己還是搞不定這個問題的話,可以找Microsoft的技術支持。

看起來你的問題就是Kernel Mode Memory leak
一般說來NonPaged用到幾十個MB就差不多了,而你用到了130MB
但是有點奇怪的是你並沒有開啓/3GB,那麼就算用到了130MB,也還有足夠的剩餘量。如果開啓了/3GB的話,在4G內存的Windows 2003上面,Kernel mode 的NonPaged總大小約爲150MB,150-130 = 20MB。
前面我說過,剩餘大小<20MB的時候就會發生問題。

現在你只能用http://support.microsoft.com/kb/177415/的方法來看誰用掉了Kernel mode的NonPagedPool了。一般來講,某些驅動程序會導致leak,如果不同的帳戶開啓了無數個桌面應用的話,也會導致Kernel Mode Memory leak

任務管理器(此爲windows 2008系統任務管理器圖)

最終解決方案:

要變通解決此問題,啓用 EnableAggressiveMemoryUsage 註冊表項在註冊表中。當啓用了 EnableAggressiveMemoryUsage 註冊表項 Http.sys 驅動程序會停止接受新的連接時 LowNonPagedPoolCondition 事件的通知是驅動程序。此事件發生時可用的非分頁緩衝的池內存爲少於 8 MB。這些值可能會更改在將來的版本的 Windows。

若要向註冊表中添加 EnableAggressiveMemoryUsage 註冊表項,請按照下列步驟操作:

  1. 單擊 開始、 單擊 運行,鍵入 註冊表編輯器,然後單擊 確定
  2. 找到並單擊下面的註冊表項:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
  3. 在 編輯 菜單上指向 新建,然後單擊 DWORD 值
  4. 鍵入 EnableAggressiveMemoryUsage,然後按 ENTER 鍵。
  5. 用鼠標右鍵單擊 EnableAggressiveMemoryUsage、 單擊 修改,在 數值數據 框中鍵入 1,然後單擊 確定
  6. 退出註冊表編輯器。
  7. 單擊 開始、 單擊 運行、 在 打開 框中鍵入 Cmd,然後單擊 確定
  8. 命令提示符鍵入 淨停止 http/y,然後按 ENTER 鍵。
  9. 命令提示符鍵入 net start w3svc,然後按 ENTER 鍵。

 

其它的解決方案:

1.前段時間我的web服務器也有類似的問題,搞了半天也沒有搞好,後來安裝最新的sp+所有新補丁就好了 (不可取)

2.IIS應用程序池設置不合理造成的
首先訪問量大的站點要單獨自己一個應用程序池
其次應用程序池屬性的參數設置注意一下幾點
回收中僅設置指定時間回收
性能中去掉請求隊列限制的勾
運行狀況裏去掉啓用快速失敗保護的勾,關閉時間限制設置到180秒以上
標識中預定義賬戶改爲本地系統   (優先考慮這個方案)

3.連接數超過了限制。
使用NET STOP W3SVC停止然後再NET START W3SVC試試。
此外,修改連接池中的連接數量。

還有,重新設定ASP中SESSION的超時,使IIS能較快地釋放無效資源和連接。 

4.檢查程序,是否有死循環,資源沒有是否(如:數據庫連接沒有close,  非託管代碼(c/c++ DLL)沒有釋放)

5.根據系統事件日誌,查看“應用程序” 和 “系統”  中是否有IIS相關的錯誤

http://www.camnpr.com/archives/577.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章