如何解決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 註冊表項,請按照下列步驟操作:
- 單擊 開始、 單擊 運行,鍵入 註冊表編輯器,然後單擊 確定。
- 找到並單擊下面的註冊表項:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
- 在 編輯 菜單上指向 新建,然後單擊 DWORD 值。
- 鍵入 EnableAggressiveMemoryUsage,然後按 ENTER 鍵。
- 用鼠標右鍵單擊 EnableAggressiveMemoryUsage、 單擊 修改,在 數值數據 框中鍵入 1,然後單擊 確定。
- 退出註冊表編輯器。
- 單擊 開始、 單擊 運行、 在 打開 框中鍵入 Cmd,然後單擊 確定。
- 命令提示符鍵入 淨停止 http/y,然後按 ENTER 鍵。
- 命令提示符鍵入 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相關的錯誤