IIS優化篇
首先程序的優化,不只是沿著一個點進行,往往都是程序配合服務器及數據服務器配置提升性能
1.站點連接數設置
打開IIS,找到需要設置的站點,右鍵管理網站——高級設置——行為——限制,調整最大並發連接數,這裏默認不要修改。
超出最大連接數的用戶則會直接返回:HTTP Error 503. The service is unavailable.”
2.檢查應用程序池設置
應用程序池右鍵高級設置——常規——隊列長度,默認1000,範圍在10-65535 之間。
高級設置——進程模式——最大工作進程數,默認1,最大設置4000000個,工作進程是消耗服務器資源的,可以依照實際情況適當增加。
關於IIS工作最大進程可以閱讀:http://www.w 2 b c.com/article/142651
3.禁止多余的Web服務擴展
IIS6.0支持多種服務擴展,有些管理員偷懶或者不求甚解,擔心Web運行中出現解析錯誤,索性在建站時開啟了所有的Web服務擴展。殊不知,這其中的有些擴展比如“所有未知CGI擴展”、“在服務器端的包含文件”等是Web運行中根本用不到的,況且還占用IIS資源影響性能拖垮Web,甚至某些擴展存在漏洞容易被攻擊者利用。因此,科學的原則是,用到什麽擴展就啟用什麽擴展。
如果企業站點是靜態頁面,那什麽擴展都不要開啟。不過現在的企業站點都是交互的動態頁面比如asp、php、jsp等。如果是asp頁面,那只需開啟“Active Server Pages”即可。對於php、jsp等動態頁面IIS6.0默認是不支持的需要進行安裝相應組件實現對這些擴展的支持。不過,此時用不到的擴展完全可以禁用。
禁止Web服務擴展的操作非常簡單,打開“IIS管理器”,在左窗格中點擊“Web服務擴展”,在右側選擇相應的擴展,然後點擊“禁用”即可。
IIS默認支持.asp、.cdx等8種擴展名的映射,這其中除了.asp之外其他的擴展幾乎用不到。這些用不著的擴展會加重web服務器的負擔,而且帶來一定的安全隱患。比如.asa,.cer等擴展名,就可以被攻擊者利用來獲得webshell。因為一般的asp系統都會限制asp文件的上傳,但如果沒有限制.asa或者.cer等擴展名,攻擊者就可以更改文件後綴突破上傳限制,運行.asa或者.cer的文件獲得webshell。刪除IIS擴展名的操作是:打開IIS管理器,右鍵單擊“默認Web站點”選擇“屬性”,點擊“主目錄”選項卡,然後點擊“配置”打開應用程序窗口,最後根據自己的需要選擇不必要的應用程序映射比如.shtml, .shtm, .stm等,然後點擊“刪除”即可。
5.取消訪問記錄
IIS6.0默認開啟對於web的訪問記錄。當開啟記錄功能後,IIS會事無巨細地忠實記錄所有的web訪問記錄。這些記錄文件的內容是非常龐雜的,比如訪問時間、客戶端IP、從哪個鏈接訪問、 Cookies等,另外還包括 Method(方法), UserAgent(用戶代理)等。這些記錄不但占用大量的磁盤空間還大大地影響了web服務器的性能。有人做過評測,停止訪問記錄可以提升5%到8%的web性能。而且這些記錄對於一般用戶,特別是中小型的Web站點沒有什麽用途,簡直太耗費系統性能了,因此建議關閉它。
取消訪問記錄的操作是:打開IIS管理器,定位到具體的web站點,右鍵點擊選擇“屬性”,在“主目錄”選項卡下取消對“記錄訪問”的勾選即可。
6.對訪問流量進行限制
默認情況下IIS 6.0對於訪問量是沒有限制的,如果並發連接過大超過了Web的負載輕則發生網絡擁塞,重則導致服務器宕機。因此需要對用戶的訪問進行限制,控制Web訪問的流量。
打開“Internet信息服務”管理器,在其窗口右側點擊主機名前面的“+”號,依次定位到某個Web站點上。選中該Web站點右鍵單擊選擇“屬性”,在打開的屬性設置窗口中選中“性能”標簽,將“啟用帶寬限制”復選框選中,在隨後被激活的“最大網絡使用”設置框中,指定你的網絡站點帶寬的具體數值。大家可以根據服務器的性能及其訪問量綜合考慮繼續設置。對於一般的企業站點將帶寬流量設置為1500kb/s就差不多了。同時在“網站連接”下可以進行連接限制的設置,大家可以根據情況設置一個數值。完成以上設置後,IIS就只能使用其被授予的資源進行Web服務,杜絕了異常情況造成的服務器過載,為Web減負。
7.讓Web負載自由伸縮
默認情況下IIS是全負荷地為Web提供服務的,這在一定程度上加重了Web負擔。如何能夠自動地根據負載變化自動調節工作進程呢?
利用IIS 6.0的Web園,我們只需指定用於某個應用程序池的工作進程的數量就可以了實現各個Web站點之間的隔離。具體的配置步驟是:在“Internet信息服務”管理器中打開應用程序池的“屬性”對話框,轉到“性能”頁,在“Web園”下面的“最大工作進程數”輸入框中輸入進程數量。當服務器的負載較小,不需要額外的工作進程時,IIS 6.0在一定的時間後(默認20分鐘,可配置)自動縮減實際的工作進程數量;如果負載變大,需要額外的工作進程,IIS 6.0再次增加工作進程數量。另外,還可以“啟用CUP監視”,設置“最大CPU使用率”,“刷新CUP使用率值”以及“CPU使用率超過最大使用率是執行的操作”,這些設置可以根據需要進行設置。當一切設置完成後這一切就交給IIS自動進行,不需要管理員幹預。
8.配置應用呈現池
IIS可以支持多個Web服務,特別是虛擬主機一臺服務器上有非常多的Web站點。如何才能做到各個站點之間相互獨立,不因某些Web站點出現故障而影響其他站點呢?為不同工作進程指定應用程序池是個很好的解決辦法。
(1)、創建
打開“IIS 管理器”中,展開本地計算機,右鍵單擊“應用程序池”,選擇“新建→應用程序池”。在“應用程序池名稱”框中,輸入新的應用程序池名稱。如果點選選“將現有應用程序池作為模板”,可以在“應用程序池名稱”下來列表中選擇相應的應用程序池,最後單擊“確定”即可。 (2)、指派
在“IIS 管理器中”,右鍵單擊你要為其指派應用程序池的站點然後單擊“屬性”。在該站點的屬性面板中“主目錄”選項卡,在“應用程序池”下拉列表中選擇剛才創建的應用程序池即可。如果所有的選項為灰色,單擊“創建”按鈕就可以輸入“應用程序名”,然後在“應用程序池”列表框中,選擇並指派網站的應用程序池了。(3)、回收
利用“回收”功能,可是設置如何恢復系統資源進行IIS資源使用的靈活定制。打開“IIS 管理控制臺”,單擊“+”號依次“展開本地計算機→應用程序池”。選擇你要回收的應用程序池右鍵單擊選擇“屬性”,出現應用程序池的屬性對話框,單擊“回收”選項卡在其下可以設置“進程回收”、“內存回收”等,所有這些設置大家根據實際需要進行設置。
9.
找到Web站點對應的應用程序池,“應用程序池” → 找到對應的“應用程序池” → 右鍵“高級設置...”
9.1、基本設置
[1] 隊列長度: 默認值1000,將原來的隊列長度改為 65535。
[2] 啟動32位應用程序:默認值False,改為True, 否則安裝一些32的組建或32位的php都會出錯。
[3] 托管管道模式:Integrated 或 Classsic。
9.2、高級設置
[1] 閑置超時(分鐘):默認20分鐘,修改設長。
[2] 快速故障防護 → 已啟用 :默認True,改為False。
3、解決PEP第一次打開PEP速度慢
回收間隔時間
使用windows server 2008 r2解決回收假死的問題
打開應用程序池 -> 高級設置 ->在“禁止重疊回收”裏選擇“true”,這樣就有效避免了應用程序池回收假死問題。
10、支持同時10萬個請求
通過對IIS7的配置進行優化,調整IIS7應用池的隊列長度,請求數限制,TCPIP連接數等方面,從而使WEB服務器的性能得以提升,保證WEB訪問的訪問流暢。
站點碰到如下問題:
Error Summary:
HTTP Error 503.2 - Service Unavailable
The serverRuntime@appConcurrentRequestLimit setting is being exceeded.
Detailed Error Information:
Module IIS Web Core
Notification BeginRequest
Handler StaticFile
Error Code 0x00000000
由於之前使用的是默認配置,服務器最多只能處理5000個同時請求,今天下午由於某種情況造成同時請求超過5000,從而出現了上面的錯誤。
為了避免這樣的錯誤,我們根據相關文檔調整了設置,讓服務器從設置上支持10萬個並發請求。
具體設置如下:
1. 調整IIS 7應用程序池隊列長度
將原來的隊列長度由默認值 1000 改為 65535。當然這裏的隊列長度你可以根據自己的 訪問用戶*1.5 來設置,例如:有2000用戶,此處就可以設置為3000(3000=2000用戶數*1.5)。
2. 調整IIS 7的appConcurrentRequestLimit設置
由原來的默認5000改為100000。
[1] 在cmd中執行:
c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000
[2] 在%systemroot%\System32\inetsrv\config\applicationHost.config中可以查看到該設置:
<serverRuntime appConcurrentRequestLimit="100000" />
3. 調整machine.config中的processModel>requestQueueLimit的設置
[1] 單擊“開始”,然後單擊“運行”,或者 windows + R。
[2] 在“運行”對話框中,鍵入 notepad %systemroot%\Microsoft.Net\Framework64\v4.0.30319\CONFIG\machine.config,然後單擊“確定”。(不同的.NET版本路徑不一樣,可以選擇你自己當前想設置的.NET版本的config)
[3] 找到如下所示的 processModel 元素:<processModel autoConfig="true" />
[4] 將 processModel 元素替換為以下值:<processModel enable="true" requestQueueLimit="15000" />
[5] 保存並關閉 Machine.config 文件。
由原來的默認5000改為100000。
<configuration> <system.web> <processModel enable="true" requestQueueLimit="100000"/>
參考文章:http://technet.microsoft.com/en-us/library/dd425294(office.13).aspx
4. 修改註冊表,調整IIS 7支持的同時TCPIP連接數
由原來的默認5000改為100000。在cmd中執行:
reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000
可在註冊表中查看
5. 運行命令使用設置生效
net stop http & net start http & iisreset
完成上述5個設置,就可以支持10萬個並發請求,博客園博客服務器已經啟用上述設置。
為了方法大家與自己使用,我把上面能用bat操作簡單放到一個bat文件裏面了。將下面的內容保存為do.bat文件運行就可以了,需要手工的自己操作
11、支持高並發的IIS Web服務器常用設置
適用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0
適用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows Server 2012
1、應用程序池(Application Pool)的設置:
?General->Queue Length設置為65535(隊列長度所支持的最大值)
?Process Model->Idle Time-out設置為0(不讓應用程序池因為沒有請求而回收)
?Recycling->Regular Time Interval設置為0(禁用應用程序池定期自動回收)
2、.Net Framework相關設置
a) 在machine.config中將
<processModel autoConfig="true" />
改為
<processModel enable="true" requestQueueLimit="100000"/>
(保存後該設置立即生效)
b) 打開C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers\Default.browser,找到<defaultBrowser id="Wml" parentID="Default" >,註釋<capabilities>部分,然後運行在命令行中運行aspnet_regbrowsers -i。
1 2 3 4 5 6 7 8 9 10 11 12 |
< defaultBrowser id = "Wml" parentID = "Default" >
< identification >
< header name = "Accept" match = "text/vnd\.wap\.wml|text/hdml" />
< header name = "Accept" nonMatch = "application/xhtml\+xml; profile|application/vnd\.wap\.xhtml\+xml" />
</ identification >
<!--
<capabilities>
<capability name="preferredRenderingMime" value="text/vnd.wap.wml" />
<capability name="preferredRenderingType" value="wml11" />
</capabilities>
-->
</ defaultBrowser >
|
以解決text/vnd.wap.wml問題。
3、IIS的applicationHost.config設置
設置命令:
c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000
設置結果:
<serverRuntime appConcurrentRequestLimit="100000" />
(保存後該設置立即生效)
4、http.sys的設置
註冊表設置命令1(將最大連接數設置為10萬):
reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000
註冊表設置命令2(解決Bad Request - Request Too Long問題):
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768
(需要在命令行運行 net stop http & net start http & iisreset 使設置生效)
5、針對負載均衡場景的設置
在Url Rewrite Module中增加如下的規則:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
< rewrite >
< allowedServerVariables >
< add name = "REMOTE_ADDR" />
</ allowedServerVariables >
< globalRules >
< rule name = "HTTP_X_Forwarded_For-to-REMOTE_ADDR" enabled = "true" >
< match url = ".*" />
< serverVariables >
< set name = "REMOTE_ADDR" value = "{HTTP_X_Forwarded_For}" />
</ serverVariables >
< action type = "None" />
< conditions >
< add input = "{HTTP_X_Forwarded_For}" pattern = "^$" negate = "true" />
</ conditions >
</ rule >
</ globalRules >
</ rewrite >
|
相關博文:遷入阿裏雲後遇到的Request.UserHostAddress記錄IP地址問題
註意事項:添加該URL重寫規則會造成IIS內核模式緩存不工作,詳見微軟的坑:Url重寫竟然會引起IIS內核模式緩存不工作。
6、 設置Cache-Control為public
在web.config中添加如下配置:
<configuration> <system.webServer> <staticContent> <clientCache cacheControlCustom="public" /> </staticContent> </system.webServer> </configuration>
7、ASP.NET線程設置
在machine.config的<processModel>中添加如下設置:
<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50"/>
部分參考該網頁內容:http://www.jb51.net/article/36073.htm
IIS優化篇