?做過網站管理的人都知道,網絡上有關IIS6.0 服務器的問題和相關解決方案,數不勝數,當時并沒有多少比較系統的解決方案;另外,有些解決方法,似是而非,不能找到其中的問題關鍵點,筆者平時對于服務器的應用上也有點實踐,因此,今天稍稍總結一點平時遇到地問題和解決方法分享給大家,特別是對IIS的特殊權限引起問題、IIS應用程序池假死問題和比較罕見的 IIS6.0 重啟命令和自動重啟辦法。
第一個常見的問題就是Windows Server 2003應用程序池自動死了,不能恢復了,一直出現 Service Unavailable這個問題,這種常見的解決方案如下:
1、這可能是因為沒有打2003的SP1補丁而出現這個IIS6.0假死問題,但現在微軟都在自動更新里面出補丁了,一般你打好最新補丁后就不會再出現此問題了。
2、眾多周知,從IIS6.0服務器(當然IIS7.0更不要說了)開始CPU資源都在應用池里面限制了,這不像以前的IIS5.0。所以假死的池的真正“兇手”就是應用程序池被卡死,這個時候如果你登錄服務器可以看到,在網站打不開的時候可以看到相應的應用池是禁用的,上面出現一個紅叉。這個時候點擊鼠標右鍵啟動網站就會自動恢復。 出現這個現象大概是以下幾個因數造成的:
①你限制了應用池的資源,限制得太小以至于卡死。 這個時候如果你這個池下面的網站占用CPU太高,比如CPU超過50% 那么5分鐘后他就自動死了,手工默認建立的應用池默認是超過資源不操作。
②內存限制。在IIS6.0應用池上面有虛擬內存和最大內存限制,如果你設置了這個。那么網站訪問量大了 也會出現假死,所以不建議設置這里。默認就可。
3、服務器自身內存太小,網站運行當然需要使用到內存了,當內存不夠的時候應用池也會死掉變成禁用。那么只有等內存全部釋放出來才能恢復應用池了。出現這個情況的時候你就要考慮加內存或者檢查到底是什么程序占用了內存了。比如MSSQL數據庫,這個是很占內存的,最好別和WEB服務器同時存在于一個服務器上。很多人用1G內存做Server 2003系統,要知道2003NET結構是很占用內存的,所以做服務器選2003還得把內存加到2G或更高才好。 內存不夠上面 2點講到的,是沒辦法操作了,也無法自動恢復。
4、ACCESS數據庫!這是一個太常見的問題,因為數據庫太大或查詢太多,就會出現把IIS服務器卡死的現象,這個時候的解決方法就是修復ACCESS數據庫,或盡量少用ACCESS數據庫,如果條件允許的話可以直接升級至MSSQL數據庫,當然你也可以選擇在技術方面革新,比如說全站生成靜態功能等。
5、不同網站用不同應用池:根據你自己實際情況而定,站點大的最好獨立一個應用池,限制它的資源超過了自動回收,這樣就不影響其他站點。中型站點可以多個網站共用一個應用池,比如4或者6個個站點用一個池,設置資源回收的時間等等。這樣就算超資源了也不影響其它應用池的網站。
6、設置回收時間。很多人以為設置回收池越短越好,其實是錯誤的,每次回收當然是把內存回收回來了,但加重了一次服務器的負擔,當服務器比較繁忙的時候,有可能導致其他應用池死。所以建議設置共1000就行了。其他獨立池按照他網站流量而設置 可以設置600 也行,共用的不建議設置太短。
8、網站后臺過不了多久自動退出又要重新登陸:這個情況就是你設置回收時間太短了,按照 6點設置吧。 不要設置什么20分、30分這樣的,這樣不好的。另外一個原因就是和站的響應設置時間有關,設置得稍長些。
9、windows 2003系統IIS6.0訪問本機的站點時提示“Service Unavailable”;
查看iis的應用程序池,狀況提示為:未指定錯誤,同時應用程序池自動停止運行;
用事件查看器查看系統錯誤日志,發現如下提示:
應用程序-特定 權限設置未將 COM 服務器應用程序(CLSID 為{A9E69610-B80D-11D0-B9B9-00A0C922E750})的 本地 激活 權限授予用戶 NT AUTHORITYNETWORK SERVICE SID (S-1-5-20)。可以使用組件服務管理工具修改此安全權限。
解決方法,給NETWORK SERVICE 加上訪問iis服務的權限,具體方法是點擊“開始”-“控制面板”-“管理工具”-“組件服務”-“計算機”-“我的電腦”-“DCOM”選項,選擇其下的“IIS ADMIN SERVICE”,右健選擇“屬性”,找到“安全”,在“啟動和激活權限”中編輯“自定義”,添加帳號“NETWORK SERVICE ”,給該帳號賦予“本地啟動”和“本地激活”的權限,重新啟動IIS之后再訪問同一站點,則一切正常。
接下來我們說一下重啟IIS中的特定應用程序池命令和自動重啟的方法。
在操作系統是Windows server 2003 SP1+的情況下,可以用以下命令部分重啟IIS應用程序池:
cscript.exe c:windowssystem32iisapp.vbs /a "DefaultAppPool"
其中/a 代表alternatively,"DefaultAppPool"代表應用程序池的實例名。
? ? 如果要設置自動重啟這個應用程序池,可以嘗試放在批處理中,用計劃任務調用此批處理即可。很多人覺得計劃任務不安全,都要禁掉,事實上,計劃任務的不安全是建立在其它方面不安全的前提上的,如果由于其它方面的不安全,被放入執行程序,計劃任務執行,這和計劃任務沒有直接關系。但是我們也不得不說的就是關掉肯定會在一定程度上減少安全隱患。
? ? 總之IIS服務器管理和維護是一個慢慢積累、慢慢實踐的過程,許多解決方法并不是絕對的,也不是唯一的,這就需要網站管理人員的細心以及解決辦法的能力比較強。
(編輯:小酷)