支持高并發(fā)的IIS Web服務(wù)器常用設(shè)置

發(fā)表于 討論求助 2023-05-10 14:56:27

適用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0


適用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows Server 2012


1、應(yīng)用程序池(Application Pool)的設(shè)置:?


General->Queue Length設(shè)置為65535(隊(duì)列長(zhǎng)度所支持的最大值)

Process Model->Idle Time-out設(shè)置為0(不讓應(yīng)用程序池因?yàn)闆](méi)有請(qǐng)求而回收)

Recycling->Regular Time Interval設(shè)置為0(禁用應(yīng)用程序池定期自動(dòng)回收)

2、.Net Framework相關(guān)設(shè)置


a) 在machine.config中將


<processModel autoConfig="true" />

改為


<processModel enable="true" requestQueueLimit="100000"/>

(保存后該設(shè)置立即生效)


b) 打開(kāi)C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers\Default.browser,找到<defaultBrowser id="Wml" parentID="Default" >,注釋<capabilities>部分,然后運(yùn)行在命令行中運(yùn)行aspnet_regbrowsers -i。



<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問(wèn)題。


3、IIS的applicationHost.config設(shè)置


設(shè)置命令:


c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

設(shè)置結(jié)果:


<serverRuntime appConcurrentRequestLimit="100000" />

(保存后該設(shè)置立即生效)


4、http.sys的設(shè)置


注冊(cè)表設(shè)置命令1(將最大連接數(shù)設(shè)置為10萬(wàn)):


reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000

注冊(cè)表設(shè)置命令2(解決Bad Request - Request Too Long問(wèn)題):


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

(需要在命令行運(yùn)行 net stop http? & net start http & iisreset 使設(shè)置生效)


5、針對(duì)負(fù)載均衡場(chǎng)景的設(shè)置


在Url Rewrite Module中增加如下的規(guī)則:



<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>


相關(guān)博文:遷入阿里云后遇到的Request.UserHostAddress記錄IP地址問(wèn)題


注意事項(xiàng):添加該URL重寫規(guī)則會(huì)造成IIS內(nèi)核模式緩存不工作,詳見(jiàn)微軟的坑:Url重寫竟然會(huì)引起IIS內(nèi)核模式緩存不工作。


6、 設(shè)置Cache-Control為public


在web.config中添加如下配置:?



<configuration>

? ? <system.webServer>

? ? ? ? <staticContent>

? ? ? ? ? ? <clientCache cacheControlCustom="public" />

? ? ? ? </staticContent>

? ? </system.webServer>

</configuration>


7、ASP.NET線程設(shè)置


在machine.config的<processModel>中添加如下設(shè)置:?


<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50"/>

相關(guān)博文:云計(jì)算之路-阿里云上:從ASP.NET線程角度對(duì)“黑色30秒”問(wèn)題的全新分析


8、修改TCP MaxUserPort限制


由默認(rèn)5000改為65534,修改方法:在注冊(cè)表 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 中添加名為MaxUserPort,類型為DWORD(32-bit),值為65534(10進(jìn)制)的項(xiàng)目并重啟計(jì)算機(jī)。



發(fā)表
26906人 簽到看排名