在調優iis的時候,朋友分享給我一個特別棒的設置方法步驟,感謝好朋友的分享。
IIS應用程序池多工作進程設置及Session共享
1 概述
微軟的IIS作為Windows平台下Asp.Net網站發布的默認WEB服務器,在性能上提供了比較大的彈性和可伸縮性,通過應用程序池工作進程數的設置,可以支持從幾十到上萬並發數量的訪問。本文檔對相應設置過程進行操作指引,並對設置過程中的注意事項進行重點描述。
2 應用程序池多工作進程設置
根據以往的經驗值,在主流的PC-SERVER主機(Xeon E5645 @ 2.4GHz,6核心12線程,32G內存)上,每個應用程序池的單一工作進程,能夠大約承受30-50個左右的並發,如果超出此並發數量,可能會出現IIS無法響應、或響應時間明顯變長的問題。通過合理設置應用程序池的最大工作進程數,可顯著提高IIS應對高並發的能力,減少網站響應時間。
2.1 設置步驟
1、 找到待設置網站對應的應用程序池,如圖 1所示:
2、 在所選應用程序池上點擊右鍵,選擇【高級設置】,如圖 2所示:
3、 在彈出的【高級設置】窗口中找到【最大工作進程數】,並設置為合理值,如圖 3所示:
4、 點擊【確定】按紐保存設置。
2.2 注意事項
1、 最大工作進程數值的設置依據
在確定每個應用程序池的最大工作進程數時,最主要參考的數據包括網站的最大並發用戶數以及WEB服務器的可用內存數。最大並發用戶數需要通過一段時間的觀察,記錄下在系統忙時的最大並發用戶數,按照每工作進程能承載30個並發的原則來確定應用程序池的最大工作進程數。同時要注意,每個工作進程大約會占用200M左右的系統內存,在設置最大工作進程數的時候,要主要最大工作進程數與200M的乘積不要超過系統最大可用內存數。一般情況下,建議按照每次增加5個工作進程數的方式對最大工作進程數進行調整,調整完后對網站觀察一段時間,如依然無法滿足要求,再繼續增加5個工作進程數。
2、 session共享問題
如果網站沒有用到session機制,則不會引發此問題。如果用到了session機制進行傳值和保存數據,則需要考慮在應用程序池多個工作進程間進行session共享,防止出現session丟失的問題。此問題的解決措施見session共享設置。
3、 合理的資源回收機制
大多數應用系統都存在工作時間使用量高、非工作時間使用量低的情況,針對這種現象,在系統非忙時應合理的釋放操作系統資源,因此,應合理設置應用程序池的【限制超時】和【回收時間間隔】屬性。
3 Asp.Net的Session共享設置
Asp.Net提供了以下幾種Session保存機制,如表 1所示:
方式名稱 |
存儲方式 |
性能 |
Off |
設置為不使用Session功能 |
無 |
InProc |
設置為將Session存儲在進程內,就是ASP中的存儲方式,這是默認值 |
最高 |
StateServer |
設置為將Session存儲在獨立的狀態服務中。通常是aspnet_state.exe進程 |
性能損失10-15% |
SQLServer |
設置將Session存儲在SQL Server中。 |
性能損失10-20% |
Custom |
自定制的存儲方案 |
由實現方式確定 |
在Asp.Net程序的web.config配置文件中對Session的保存方式進行設置。如果不顯示指定Session的保存方式,默認使用InProc的方式保存,即Session由提供服務的工作進程保存。
為了提高IIS對高並發的支持,可以增加應用程序池的工作進程數,IIS會根據內置的調度算法,將用戶的請求在多個工作進程間動態分配,如果搭建了服務器集群和負載均衡,則用戶請求會在多台機器的多個工作進程間進行動態分配。在上述情況下,如果Session的保存方式依然為InProc,則用戶請求在多個工作進程間切換時可能出現Session丟失的情況,導致請求失敗或出錯。
為解決上述為,需要將Session的保存方式設置為共享,即表 1中的“StateServer”、“SQLServer”或“Custom”方式。這幾種方法中,“SQLServer”方式需要安裝獨立的SQLServer數據庫,“Custom”方式需要自行實現相應的Session存儲與檢索過程,部署起來相對復雜,相對上述兩種方式,“StateServer”方式在功能性和可實施性上最好,因此下文重點介紹此種Session共享機制。
3.1 設置步驟
1、 確定StateServer服務器。如果只有一台WEB服務器,可指定當前服務器為StateServer服務器。如果存在多台服務器集群,可指定集群中的一台符合較輕的服務器作為StateServer服務器。
2、 修改注冊表,允許遠程訪問StateServer服務。可直接導入如下腳本。
端口默認為42424,可根據需要進行修改,下文均以42424為例。
3、 打開【管理工具】-【服務】,找到“Asp.Net State Service”,點擊右鍵,選擇【屬性】,如圖 4所示:
在彈出的【屬性】窗口中,將【啟動方式】改為“自動”,然后點擊【啟動】按紐啟動服務,如圖 5所示:
4、 打開待修改網站主目錄下的web.config配置文件,搜索找到“<sessionstate>”配置節點,如果不存在配置節點,則在“<system.web>”節點下新建“<sessionstate>”配置節點,並將節點屬性修改為:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" />
其中“tcpip=*”后的主機IP地址和端口可根據實際情況修改。修改完后保存配置文件即可。
3.2 注意事項
1、 Session中保存的自定義對象必須顯示標記為可序列化“[serializable]”。如果未顯示標記為可序列化,則在訪問頁面時會報錯。
2、 StateServer服務器必須為Windows Server操作系統,如Windows Server 2003或Windows Server 2008。