網(wǎng)絡(luò)上有關(guān)iis的問題和相關(guān)解決方案,多不勝搜,但很多都比較零散,沒有系統(tǒng)的解決方案;另外,有些解決方法,似是而非,不能找到其中的問題關(guān)鍵點(diǎn),本人平時(shí)對于服務(wù)器的應(yīng)用上也有點(diǎn)實(shí)踐,因此,今天稍稍總結(jié)一點(diǎn)平時(shí)遇到地問題和解決方法,特別是對iis的特殊權(quán)限引起問題、iis應(yīng)用程序池假死問題和比較罕見的iis重啟命令和自動重啟辦法。其它相關(guān)問題,繼續(xù)關(guān)注本博。
一、2003應(yīng)用程序池自動死了,不能恢復(fù)了,一直出現(xiàn) Service Unavailable 常見方法如下。
1:沒有打SP1補(bǔ)丁的時(shí)候會出現(xiàn)這個(gè)IIS6.0假死問題,但現(xiàn)在微軟都在自動更新里面出補(bǔ)丁了,一般你打好最新補(bǔ)丁后是不會出現(xiàn)此問題了。(所以現(xiàn)在的IIS假死與這個(gè)關(guān)系不是很大)
2:從IIS6.0開始CPU資源都在應(yīng)用池里面限制了,不象以前的IIS.5。所以假死的池的緣故就是池被拉死,你在網(wǎng)站打不開的時(shí)候可以看到你的某個(gè)應(yīng)用池是禁用的,上面出現(xiàn)一個(gè)紅叉。你鼠標(biāo)右鍵啟動網(wǎng)站又會自動恢復(fù)。 這個(gè)原因:大概是以下幾個(gè)因數(shù)造成的。
(1):你限制了應(yīng)用池的資源,限制得太小 比如:50這樣或更少更多一點(diǎn),這個(gè)時(shí)候如果你這個(gè)池下面的網(wǎng)站占用CPU太高,比如超過50% 那么5分鐘后他就自動死了,手工默認(rèn)建立的應(yīng)用池默認(rèn)是超過資源不操作。
出現(xiàn)上面這個(gè)情況解決方法:1:不限制CPU資源,(這個(gè)是不可取的,不限制資源,有的程序有BUG占用資源厲害了的,服務(wù)器都會被拉死,你可能都無法操作服務(wù)器。)2:在超過資源那里選擇關(guān)閉,這個(gè)關(guān)閉默認(rèn)是失敗5次,90秒內(nèi)恢復(fù),一般默認(rèn)就可。網(wǎng)站能自動恢復(fù),這個(gè)關(guān)閉:不是永久關(guān)閉,意思是超過資源關(guān)閉,然后在某時(shí)間內(nèi)自動恢復(fù)池。不操作就是不恢復(fù),這個(gè)是很多人的誤區(qū)。
(2):內(nèi)存限制 在IIS6.0應(yīng)用池上面有虛擬內(nèi)存和最大內(nèi)存限制,如果你設(shè)置了這個(gè)。那么網(wǎng)站訪問量大了 也會出現(xiàn)假死,所以不建議設(shè)置這里。默認(rèn)就可。
3:就是服務(wù)器自身內(nèi)存太小,網(wǎng)站運(yùn)行當(dāng)然需要使用到內(nèi)存了,當(dāng)內(nèi)存不夠的時(shí)候應(yīng)用池也會死掉變成禁用。那么只有等內(nèi)存全部釋放出來才能恢復(fù)應(yīng)用池了。出現(xiàn)這個(gè)情況:那么你就要考慮加內(nèi)存或者檢查到底是什么程序占用了內(nèi)存了。比如MSSQL數(shù)據(jù)庫,這個(gè)可是吃內(nèi)存得大戶啊,最好別和WEB服務(wù)器同時(shí)一個(gè)服務(wù)器上。很多人用1G內(nèi)存做 2003系統(tǒng),2003NET結(jié)構(gòu)是很占用內(nèi)存的,所以做服務(wù)器選2003還得把內(nèi)存加到2G或更高才好。 內(nèi)存不夠上面 2點(diǎn)講到的,是沒辦法操作了,也無法自動恢復(fù)。
4:就是ACCESS數(shù)據(jù)庫太大或查詢太多,這個(gè)也會出現(xiàn)把IIS拉死,解決方法;修復(fù)ACCESS數(shù)據(jù)庫,或盡量少用ACCESS數(shù)據(jù)庫,升級至sqlserver數(shù)據(jù)庫;或者在技術(shù)方面革新,像現(xiàn)在有些網(wǎng)站系統(tǒng),風(fēng)訊、動易等cms;pjblog、zblog等博客程序,都支持生成靜態(tài)功能.
5:不同網(wǎng)站用不同應(yīng)用池:根據(jù)你自己實(shí)際情況而定,站點(diǎn)大的最好獨(dú)立一個(gè)應(yīng)用池,限制他的資源超過了自動回收,看上面(1)講到的,這樣就不影響其他站點(diǎn)。中型站點(diǎn):多個(gè)網(wǎng)站共用一個(gè)應(yīng)用池,比如5個(gè)站點(diǎn)用一個(gè)池,設(shè)置他資源時(shí)間等等。這樣他們就算超資源了也不影響其他應(yīng)用池的網(wǎng)站。
6:設(shè)置回收時(shí)間:很多人以為設(shè)置回收池越短越好,其實(shí)是錯誤的,每次回收當(dāng)然是把內(nèi)存回收回來了,但加重了一次服務(wù)器的負(fù)擔(dān),當(dāng)服務(wù)器比較繁忙的時(shí)候,有可能導(dǎo)致其他應(yīng)用池死。所以建議設(shè)置共1000就行了。其他獨(dú)立池按照他網(wǎng)站流量而設(shè)置 可以設(shè)置600 也行,共用的不建議設(shè)置太短。
7:網(wǎng)站后臺過不了多久自動退出又要重新登陸:這個(gè)情況就是你設(shè)置回收時(shí)間太短了,按照 6點(diǎn)設(shè)置吧。 不要設(shè)置什么20分、30分這樣的,這樣不好的。另外一個(gè)原因就是和站的響應(yīng)設(shè)置時(shí)間有關(guān),設(shè)置得稍長些。
8:windows 2003系統(tǒng)iis6訪問本機(jī)的站點(diǎn)時(shí)提示“Service Unavailable”;
查看iis的應(yīng)用程序池,狀況提示為:未指定錯誤,同時(shí)應(yīng)用程序池自動停止運(yùn)行;
用事件查看器查看系統(tǒng)錯誤日志,發(fā)現(xiàn)如下提示:
-----------------------------------
應(yīng)用程序-特定 權(quán)限設(shè)置未將 COM 服務(wù)器應(yīng)用程序(CLSID 為
{A9E69610-B80D-11D0-B9B9-00A0C922E750}
)的 本地 激活 權(quán)限授予用戶 NT AUTHORITY\NETWORK SERVICE SID (S-1-5-20)??梢允褂媒M件服務(wù)管理工具修改此安全權(quán)限。
解決方法,給NETWORK SERVICE 加上訪問iis服務(wù)的權(quán)限,具體方法如下:
點(diǎn)擊“開始”-“控制面板”-“管理工具”-“組件服務(wù)”-“計(jì)算機(jī)”-“我的電腦”-“DCOM”選項(xiàng),
選擇其下的“IIS ADMIN SERVICE”,右健選擇“屬性”,找到“安全”,在“啟動和激活權(quán)限”中編輯“自定義”,添加賬號“NETWORK SERVICE ”,給該賬號賦予“本地啟動”和“本地激活”的權(quán)限,重新啟動IIS之后再訪問同一站點(diǎn),則一切正常。
9:重啟IIS中的特定應(yīng)用程序池命令和自動重啟的方法
在操作系統(tǒng)是Windows server 2003 SP1+的情況下,可以用以下命令部分重啟IIS應(yīng)用程序池:
cscript.exe c:\windows\system32\iisapp.vbs /a "DefaultAppPool"
其中/a 代表alternatively,"DefaultAppPool"代表應(yīng)用程序池的實(shí)例名。如果要設(shè)置自動重啟這個(gè)應(yīng)用程序池,可以嘗試放在批處理中,用計(jì)劃任務(wù)調(diào)用此批處理即可。很多人覺得計(jì)劃任務(wù)不安全,都要禁掉,事實(shí)上,計(jì)劃任務(wù)的不安全是建立在其它方面不安全的前提上的,如果由于其它方面的不安全,被放入執(zhí)行程序,計(jì)劃任務(wù)執(zhí)行,這和計(jì)劃任務(wù)沒有直接關(guān)系。當(dāng)然,關(guān)掉,是會減少一些安全隱患,這是不錯。