一、如果出現(xiàn)“Service Unavailable”的提示,刷新幾下又可以訪問。
出現(xiàn)這種情況是由于您的網(wǎng)站超過了iis限制造成的由于2003的操作系統(tǒng)在提示IIS過多時并非像2000系統(tǒng)提示“鏈接人數(shù)過多”,而是提 示"Service Unavailable",出現(xiàn)這種情況是由于網(wǎng)站超過了系統(tǒng)資源限制造成的,主要是程序占用資源太多。
比如同樣是100人在線的論壇,雷傲論壇所占的資源就是PW論壇所占資源的10倍以上;另外,一些死循環(huán)程序,或者不優(yōu)化的程序都會占用太多的系統(tǒng)資源,而系統(tǒng)資源明顯是有限的。不過WINDOWS2003的操作系統(tǒng),各網(wǎng)站之間是以獨立進程運行的,不會相互影響。
如果一個網(wǎng)站的程序占資源太多或者發(fā)生太多的錯誤,系統(tǒng)日志就會提示:“應(yīng)用程序池 'xxx' 被自動禁用,原因是為此應(yīng)用程序池提供服務(wù)的進程中出現(xiàn)一系列錯誤,或者提示:應(yīng)用程序池 'xxx' 超過了其作業(yè)限制設(shè)置。這時,訪問這個網(wǎng)站就會提示:Service Unavailable。一般系統(tǒng)會在30秒左右恢復(fù)正常,多刷新幾次就能正常訪問了。
另外,如果你的網(wǎng)站當(dāng)前訪問人數(shù)過多,超過了系統(tǒng)的iis連接數(shù)限制,也會出現(xiàn)Service Unavailable的提示(win2k主機下出現(xiàn)連接過多就會提示:連接過多,請稍后再試;而win2003的主機剛直接提示:Service Unavailable)
二、沒有限制IIS連接,還是遭遇Service Unavailable
多見于使用ACCESS數(shù)據(jù)庫的網(wǎng)站,一般使用windows 2003 IIS 6的用戶可能這個問題一直正常的系統(tǒng),突然有一個網(wǎng)站打不開了提示: Service Unavailable 但這個網(wǎng)站并沒有限制IIS連接數(shù)。然后馬上影響到了別的網(wǎng)站,不到一會,其他的網(wǎng)站也全變成了Service Unavailable 這是什么原因呢?
我們分析后可以知道,還是MS的老問題。ACCESS引擎當(dāng)了。用服務(wù)器醫(yī)生的文件醫(yī)生修復(fù),查看修復(fù)結(jié)果時會發(fā)現(xiàn)一些文件引起ACCESS引擎“災(zāi)難性故障”及“未將對象引用設(shè)置到對象的實例”的錯誤。 通過文件醫(yī)生修復(fù)后,系統(tǒng)才會恢復(fù)正常。
三、瀏覽一個 Windows SharePoint Services Web 站點時,提示:Service Unavailable
Microsoft Internet 信息服務(wù) (IIS) 6.0 中沒有正確地配置用于虛擬服務(wù)器的應(yīng)用程序池,就可能會發(fā)生此問題。
解決方案:
要解決此問題,按照下列步驟操作:
1、驗證是否已為虛擬服務(wù)器配置了應(yīng)用程序池。默認的應(yīng)用程序池是 MSSharePointPortalAppPool。
請按照下列步驟來確定虛擬服務(wù)器正在使用的應(yīng)用程序池。
a). 單擊“開始”,指向“管理工具”,然后單擊“Internet 信息服務(wù) (IIS) 管理器”。
b). 展開“ServerName”,展開“Web 站點”,右鍵單擊虛擬服務(wù)器,然后單擊“屬性”。
c). 單擊“主目錄”選項卡。 為虛擬服務(wù)器配置的應(yīng)用程序池列在“應(yīng)用程序池”框中。
d). 單擊“確定”。
2、驗證應(yīng)用程序池帳戶使用的密碼是否正確。IIS 不會自動輪詢 Active Directory 目錄服務(wù)中的密碼更改。如果應(yīng)用程序池帳戶是一個域帳戶,其密碼已過期,則在為此帳戶重新指定一個新密碼后,您可能會收到本文“癥狀”部分所描述的錯誤信息。
3、 驗證應(yīng)用程序池帳戶是服務(wù)器上的 IIS_WPG 組和 STS_WPG 組的成員。
4.、重新啟動 IIS 以回收應(yīng)用程序池
四、沒有正確加載ISAPI篩選器
ISAPI篩選器沒有加載成功的話會造成任意網(wǎng)站一訪問就出現(xiàn)Service unavailable,這個時候需要根據(jù)加載失敗的原因解決,或者刪除該ISAPI篩選器。
整理資料:
原因一:網(wǎng)站超過了IIS連接數(shù)
解決辦法一:增加IIS連接數(shù)
備注一:Windows 2003的操作系統(tǒng)在提示IIS過多時并非像win2000系統(tǒng)提示“鏈接人數(shù)過多”,而是提示"Service Unavailable"
原因二:網(wǎng)站超過了IIS資源限制
解決辦法二:增加網(wǎng)站的資源
備注二:Winodws2003中網(wǎng)站占用了超過IIS對該網(wǎng)站系統(tǒng)資源的限制后直接提示"Service Unavailable"
原因三:網(wǎng)站的程序發(fā)生太多的錯誤
解決辦法三:修改程序錯誤
備注三:Winodws2003中網(wǎng)站錯誤太多,就會造成該網(wǎng)站所在的應(yīng)用程序池出錯,這個時候可以在Windows2003的日志中看到“應(yīng) 用程序池 'xxx' 被自動禁用,原因是為此應(yīng)用程序池提供服務(wù)的進程中出現(xiàn)一系列錯誤”,這個時候網(wǎng)站就會直接顯示"Service Unavailable"
以上三個原因造成的"Service Unavailable",一般現(xiàn)象是出現(xiàn)"Service Unavailable"后,多刷新幾次,就可以打開。
原因四:ACCESS引擎錯誤
解決辦法四:重啟IIS
備注四:有一些文件造成了ACCESS數(shù)據(jù)庫出現(xiàn)“災(zāi)難性故障”及“未將對象引用設(shè)置到對象的實例”的錯誤。
原因四造成的"Service Unavailable",現(xiàn)象是所有該服務(wù)器上的使用Access數(shù)據(jù)庫的網(wǎng)站都出現(xiàn)錯誤,不能訪問。
以上四個原因是常見的造成了"Service Unavailable"的原因,其他還有一些問題造成了該問題,基本只要IIS重啟一下就可以的。
Service Unavailable的第五種原因就是今天的原因了:ISAPI篩選器沒有正常加載。
每個AppPool要指定一個身份(identity)來運行。IIS6中AppPool默認運行身份為NT AUTHORITY\NETWORK SERVICE。這是一個系統(tǒng)內(nèi)建帳戶,完全受系統(tǒng)控制。它支持所有必要的以服務(wù)登錄(Log on as a service)的權(quán)限,密碼也是內(nèi)部來維護——換句話說,我們可以把以服務(wù)登錄理解為它可以控制了哪些帳戶能夠使用、操作遠程資源。我們可以通過很多方法控制遠程資源的訪問。比如修改遠程資源ACL表,并允許遠端機器訪問本地資源;或者在遠程訪問時換作遠端授信帳戶(impersonating)進行操作;或者索性讓我們的程序運行在某一個配置帳戶下——log on as a service。不同的是它是宿主在IIS的AppPool中的,必然收到IIS控制,用戶本身沒有辦法像普通服務(wù)程序那樣啟動它。我要試驗的就是指定AppPool以配置帳戶啟動。
我們分幾步來部署一個web程序以指定賬戶運行。
1. 打開IIS6,在AppPool節(jié)點找到我們要修改的web程序,右鍵屬性。
默認IIS是選擇Predefined帳戶:Network Service?,F(xiàn)在我們勾選Configurable,并指定帳戶和密碼。注意:這個帳號必須是一個域帳號!
2. 將我們之前指定的apppool帳號加入IIS_WPG用戶組中。IIS_WPG用戶組維護了所有可以以其中帳戶啟動worker Process的帳戶。Worker Process是由IIS啟動的。
做完這兩步,本以為可以完美的開啟自定義帳戶運行的w3wp.exe。卻不想得到"Service Unavailable”的異常。翻看event log,我們得到以下一些錯誤:
錯誤一:此錯誤基本就是重復(fù)一下Service Unavailable的意思。。。注意主謂關(guān)系:有某某后臺要啟動某個process來運行appPool。這個process肯定就是w3wp.exe。但那個后臺是誰?這里還不知道。
Event Type: Error
Event Source: W3SVC
Event Category: None
Event ID: 1059
Date: 1/18/2008
Time: 11:48:27 AM
User: N/A
Computer: HITOMI
Description:
A failure was encountered while launching the process serving application pool 'HITOMIWS'. The application pool has been disabled.
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
錯誤二:已經(jīng)告訴我們所指定的appPool帳戶非法。另外一個極重要的提示回答了error一的疑惑:是World Wide Web Publishing Service無法啟動w3wp.exe。(這里也回答了文章最初的問題)至此,唯一的問題就是為什么帳戶非法?往下看。。。
Event Type: Warning
Event Source: W3SVC
Event Category: None
Event ID: 1057
Date: 1/18/2008
Time: 11:48:27 AM
User: N/A
Computer: HITOMI
Description:
The identity of application pool 'HITOMIWS' is invalid, so the World Wide Web Publishing Service can not create a worker process to serve the application pool. Therefore, the application pool has been disabled.
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
錯誤三:謎底揭曉了。該賬戶沒有被賦予logontype4,導(dǎo)致它非法。如果有經(jīng)驗的話,這種帳戶-logonType控制是在local Security Settings\Local Policy\User Rights Assignments里定義的。具體來說就是log on as a service。
Event Type: Failure Audit
Event Source: Security
Event Category: Logon/Logoff
Event ID: 534
Date: 1/18/2008
Time: 11:48:08 AM
User: NT AUTHORITY\SYSTEM
Computer: HITOMI
Description:
Logon Failure:
Reason: The user has not been granted the requested
logon type at this machine
User Name: HITOMIWEBSERVICE
Domain: REDMOND
Logon Type: 4
Logon Process: Advapi
Authentication Package: Negotiate
Workstation Name: HITOMI
Caller User Name: HITOMI$
Caller Domain: REDMOND
Caller Logon ID: (0x0,0x3E7)
Caller Process ID: 640
Transited Services: -
Source Network Address: -
Source Port: -
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Start > Run, secpol.msc回車, 打開local Secuirty Settings,展開Local Policy\User Rights Assignments,選擇Log on as a service這個policy,果然里面有NetworkService和sql server的n多帳戶,我們再把appPool帳戶加到這個list里面。做完之后,machine需要重新啟動。等一切再次ready以后,我們再試一下web程序,欣喜看到w3wp.exe已經(jīng)以指定帳號啟動了!
回頭再考慮一下我們什么時候要用指定帳戶運行web程序呢?It depends。當(dāng)我們的web 程序要經(jīng)常訪問域內(nèi)其他節(jié)點資源的時候,為提高訪問安全要用到指定帳戶,加強ACL控制。其實在大多數(shù)情況下NetworkService已經(jīng)可以夠用了。