有段時間時爾會iis發點小神經.
癥狀:不知道項目是什麼程式造成iis遇到致命問題導致iis應用程式集區自動關閉,今天創新高一天死了四次,(這些錯誤可以去系統事件日誌裡找到)
在網上找了一方法:
解決辦法非常簡單,開啟應用程式集區的屬性頁面,在“回收”選項卡把所有的複選框去掉,讓.NET的記憶體回收來管理記憶體而不要讓IIS來插手。
為應用程式集區 'DefaultAppPool' 提供服務的進程關閉時間超過了限制伺服器經常產生“應用程式集區 'DefaultAppPool' 提供服務的進程關閉時間超過了限制。進程 ID 是 '2068'。”的錯誤,導致iis處於假死狀態,經瞭解是IIS應用程式集區的設定問題。解決方案如下:
Internet 資訊服務(IIS)管理器->應用程式集區->DefaultAppPool->右擊屬性
一、回收
1、回收背景工作處理序(分鐘):選中,值為1740
2、回收背景工作處理序(請求數目):不選(原先設定為35000)
3、在下列時間回收背景工作處理序:不填
4、消耗太多記憶體時回收背景工作處理序:全不選。(2、3、4項可能避免了在訪問量高的時候強制回收進程可能引發的伺服器響應問題,導致iis假死不響應)
二、效能
只選中空閑逾時20分鐘。其他都不選。WEB園最大背景工作處理序數為1(預設)。注意web園這裡一定要保持預設,如果填寫其他超過1的數字就會導致一些網站程式的背景程式打不開或者重新整理不停。
原來的請求隊列限制為4000,現在無限制。
三、健全狀態
前兩項都起用,是原來的預設設定。啟動時間限制90秒,關閉時間限制180秒。
啟動快速失敗保護的鉤去掉。
為了避免真的遇到很多錯誤時沒有提示,可以不關閉,只是把快速保護的保護範圍加大些,例如失敗數50次 時間段5分鐘 則關閉對應的程式。
“關閉時間限制180秒”是必須的,因為進程關閉的時間,原來為90秒限制,是預設值,如果進程關閉時間超過90秒,則認為逾時,從而出現:進程關閉時間超過了限制 日誌,所以,適當延長這個時間,可以避免這種錯誤
第2種方法:
原因:獨立進程的 記憶體堆戔消耗完了,IIS不能建立更多的進程工作空間來處理
解決方案:
1. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC
2. 在Parameters鍵下建立一個DWORD項,名字為:UseSharedWPDesktop 值為1 重啟IIS
第3種
問題已解決,發現是資料庫連接無法釋放,不知道是什麼原因,同樣的代碼在本地就是好的,在伺服器端就有問題,最後在串連串裡加入以下語句解決問題.
Pooling=true; MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30
第4種
建立應用程式集區,不同的網站引用不同程式池。
為應用程式集區 'AppPool #1' 提供服務的進程關閉時間超過了限制。進程 ID 是 '3000'。
出現上面情況後,該應用程式集區對應的網站就訪問的非常慢,幾乎是打不開。
這種現象是不是iis假死。
重啟下該網站,問題可以得到解決。
可能是應用程式集區設定問題,不知道具體應該怎麼設定。
請高手指點。
程式碼解決辦法:
1 設定進程池回收時間.在進程池屬性裡.
2 如果你的程式是使用 asp + acc 資料庫.且acc資料庫大於30m.建議更換sql資料庫. acc資料庫大於這個值.2003系統下會造成iis6的頻繁假死.2000下會造成dllhost.exe佔用大量cpu及記憶體資源.都會嚴重影響web訪問速度.
3 asp程式存在死迴圈.
4 可使用 microsoft office 壓縮修複acc資料庫,須先備份.
引用內容2003應用程式集區假死常見問題及解決方案 2006-10-09 09:48 經常見到大家談起,2003應用程式集區自動死了,不能恢複了,一直出現 Service Unavailable 常見方法如下。 1:以前沒有SP1打補丁的時候會出現這個IIS6。0假死問題,但現在微軟都在自動更新裡面出補丁了,一般你打好最新補丁後是不會出現此問題了。(所以現在的IIS假死與這個關係不是很大) 2:從IIS6.0開始CPU資源都在應用池裡面限制了,不象以前的IIS。5。所以假死的池的緣故就是池被拉死,你在網站打不開的時候可以看到你的某個應用池是禁用的,上面出現一個紅叉。你滑鼠右鍵啟動網站又會自動回復。 這個原因:大概是以下幾個因數造成的。 (1):你限制了應用池的資源限制,限制得太小 比如:50這樣或更少更多一點,這個時候如果你這個池下面的網站佔用CPU太高,比如超過50% 那麼5分鐘後他就自動死了,手工預設建立的應用池預設是超過資源不操作。 出現上面這個情況解決方案:1:不限制CPU資源,(這個是不可取的,不限制資源,有的程式有BUG佔用資源厲害了的,伺服器都會被拉死,你可能都無法動作伺服器。)2:在超過資源那裡選擇 關閉,這個關閉預設是失敗5次,90秒內恢複,一般預設就可。網站能自動回復,這個關閉:不是永久關閉,意思是超過資源關閉,然後在某時間內自動回復池。不操作就是不恢複,這個是很多人的誤區。上次我寫過相關的這個講解了。 (2):記憶體限制 在IIS6。0應用池上面有虛擬記憶體和最大記憶體限制,如果你設定了這個。那麼網站訪問量大了 也會出現假死,所以不建議設定這裡。預設就可。 3:就是伺服器自身記憶體太小,網站運行當然需要使用到記憶體了,當記憶體不夠的時候應用池也會死掉變成禁用。那麼只有等記憶體全部釋放出來才能恢複應用池了。出現這個情況:那麼你就要考慮加記憶體或者檢查到底是什麼程式佔用了記憶體了。比如MSSQL資料庫,這個可是吃記憶體得大戶啊,最好別和WEB伺服器同時一個伺服器上。很多人用1G記憶體做 2003系統,2003NET結構是很佔用記憶體的,所以做伺服器選2003還得把記憶體加到2G或更高才好。 記憶體不夠上面 2點講到的,是沒辦法操作了,也無法自動回復。 4:就是ACCESS資料庫太大或查詢太多,這個也會出現把IIS拉死,解決方案;修複ACCESS資料庫,或盡量少用ACCESS資料庫。 5:不同網站用不同應用池:根據你自己實際情況而定,網站大的最好獨立一個應用池,限制他的資源超過了自動回收,看上面 (1)講到的,這樣就不影響其他網站。 中型網站:多個網站共用一個應用池,比如5個網站用一個池,設定他資源時間等等。這樣他們就算超資源了也不影響其他應用池的網站。 6:設定回收時間:很多人以為設定回收池越短越好,其實是錯誤的,每次回收當然是把記憶體回收回來了,但加重了一次伺服器的負擔,當伺服器比較繁忙的時候,有可能導致其他應用池死。所以建議設定共1000就行了。其他獨立池按照他網站流量而設定 可以設定600 也行,共用的不建議設定太短。 7:網站後台過不了多久自動結束又要重新登陸:這個情況就是你設定回收時間太短了,按照 6點設定吧。 不要設定什麼20分、30分這樣的,這樣不好的。