最近服務器出現了幾個問題:多個.NET版本形成網站癱瘓和Session丟失。服務器
針對第一個問題可以使用多個應用程序池來解決;第二個採用了把session存在aspnet_state進程中(aspnet_state進程獨立於w3wp.exe);session
但對第二個問題很糾結,爲何Session存在w3wp進程中會丟失,以前猜想多是其餘應用程序佔用內存太大,以致於系統回收內存把session給回收了。但繼續研究才發現有3個w3wp進程,這事因爲Web園被設置了。下來來理解下相關概念和原理:性能
首先了解下應用程序池網站
應用程序池是一個工做進程或多個工做進程的集合,默認狀況下每一個應用程序池都會有一個工做進程(w3wp.exe)與之對應,因爲工做進程是相互隔離的,因此一個應用程序池發生問題不會對已另外一個應用程序池中的應用程序形成影響。這也被常被用於解決多個.NET版本問題。spa
再來了解下Web園進程
一個應用程序池默認是開啓一個工做進程,但也能夠開啓多個工做進程,這樣可提升性能,這個功能名爲Web園,是小型的「Web農場」,您無需使用多臺計算機來傳送相同內容(Web農場),而是可使用一臺計算機中的多個進程來傳送相同內容。
配置Web園:內存
IIS6->應用程序池->選中使用的應用程序池->右鍵屬性->性能->Web園->最大工做進程數資源
IIS7->應用程序池->選中使用的應用程序池->高級屬性->進程模型->最大工做進程數路由
設置最大進程數大於1,若是這個值大於1,每一個請求將啓動一個新的工做進程實例,可啓動的最多進程數位您所設置的進程數,最大可設置爲4000000.後續請求將以循環的方式發送至工做進程。但使用Web園要考慮如下兩點:io
還有些朋友發現有多個w3wp進程,很不理解,有些朋友甚至認爲是病毒。其實這徹底和Web園的設置有關,一個工做進程就是一個w3wp.