站点部署-IIS配置优化方法
<p data-pid="_6uUiS6-">通常把站点发布到IIS上运行正常后,很少会去考虑IIS提供的各种参数,如何配置才是最适合当前站点运行需要的?这篇文章,从基本设置、回收机制、性能、并发、安全性等IIS设置讲解应当如何优化。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="a_ER7FSs">先来“IIS应用程序池”优化后的参数配置截图:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Dxi29PEA">图中一些数值限制参数,可以借助一些工具(如:windows性能监控)观察站点运行的指标进行设置,具体后面会介绍到</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZ0408.jpg" data-rawwidth="480" data-caption="" data-size="normal" data-rawheight="543" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-9d5e0d56e1e7a4bed04c1a3a934d746a_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21FZ1V2.jpg" data-original-token="v2-9d5e0d56e1e7a4bed04c1a3a934d746a" data-lazy-status="ok" width="480" height="543"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZ2I9.jpg" data-rawwidth="484" data-caption="" data-size="normal" data-rawheight="597" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic2.zhimg.com/v2-81a601f4c79294ba76d133f380550521_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21FZ3425.jpg" data-original-token="v2-81a601f4c79294ba76d133f380550521" data-lazy-status="ok" width="484" height="597"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="41O2MwtY">下面来分别解说下这些参数为什么要这样设置(注:文章中的参数,不是按照应用程序池的设置从上到下排列的,而是按照优化的功能点排列)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="wPmgHWAF"><strong>一、设置应用程序池默认设置</strong></p><p><strong><br/></strong></p><p data-pid="Q-cPbzm2">按如下图进行默认参数模板设置,设置后,新建的应用程序池就使用这个默认参数模板。</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZ3245.webp" data-rawwidth="528" data-caption="" data-size="normal" data-rawheight="419" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-ace30d5fad85e56ba3615c98fe8a8eb2_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21FZ45T.jpg" data-original-token="v2-ace30d5fad85e56ba3615c98fe8a8eb2" data-lazy-status="ok" width="528" height="419"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="0MqFeMXT"><strong>二、常规设置</strong></p><p><strong><br/></strong></p><p data-pid="uNTSpfsu"><strong>IIS版本号查看</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="ou7cEB3-">在iis管理器中->帮助->关于Internet信息服务,如下图,版本是IIS10.</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZ4640.webp" data-rawwidth="380" data-caption="" data-size="normal" data-rawheight="400" class="content_image lazy" data-actualsrc="/uploads/allimg/20230822/1-230R21FZ5E5.jpg" data-original-token="v2-cbb7bd9e9497578b23820cb1d79aa7a5" data-lazy-status="ok" width="380" height="400"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="icro16Ed"><strong>常规 > 启动32位应用程序</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="_5qecai8">默认值:False</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="DCClTcx6">优化设置:按需设置。如果确认站点依赖一些32位的组件,需将此设置为true。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="6ZKo9B8Y">建议:为 32bit 应用程序的网站单独创建一个应用程序池</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="I4vfkft4">参考:64位系统上iis运行32位的网站程序</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="9Xk9Yn2c"><strong>常规 > 托管管道模式</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="6CMIAbod">IIS7 应用程序池新增的经典模式和集成模式</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="rmC64d7p">经典模式:是为了保留和IIS6一样的处理方式,以前开发的代码,可以方便的移植到IIS7上。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="HLyqWORg">集成模式:将<span class="invisible">http://</span><span class="visible">ASP.NET</span><span class="invisible"></span>请求管道与IIS核心管道组合在一起,这种模式与操作系统结合更紧密,能够提供更好的性能,能够实现配置和治理的模块化,而且增加了使用托管代码模块扩展IIS时的灵活性。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="PI9zDZ01">优化设置: 改为 Integrated(集成模式)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LINcym0l">参考:对IIS7经典模式和集成模式的理解</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="TrtTXeml"><strong>三、 优化回收策略</strong></p><p><strong><br/></strong></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZD43.webp" data-rawwidth="530" data-caption="" data-size="normal" data-rawheight="510" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-33ed139768ec0f83cba11c7d0277c046_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21FZ62L.jpg" data-original-token="v2-33ed139768ec0f83cba11c7d0277c046" data-lazy-status="ok" width="530" height="510"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="5yyjvYIc"><strong>回收 > 固定时间间隔(分钟)</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="N1G6zcjK">一个时间段,超过该时间段,应用程序池将回收。值为 0 ,则应用程序池不会按固定间隔回收</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="qf70ljun">默认值:1740分钟,29小时</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="QoGPLHfE">优化设置:改为0 。因为无法避免在高峰期发生回收。同时设置“回收 > 特定时间”</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Ttz8_xs3"><strong>回收 > 特定时间</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LDH1fD9Y">应用程序池进行回收的一组特定的本地时间(24小时制)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="X9vwH0_M">优化设置:固定在低峰期时回收。eg:设定为 04:00 、15:30 等</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="tVkyDxtY">另外,也可以使用windows计划任务实现iis站点每周六晚定时回收</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="QCCccAjy"><strong>进程模型 > 闲置超时(分钟)</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="KIV-APXx">一个时间段,设定工作进程允许保持闲置状态的最大时间间隔,超过该时间就会自动关闭。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="DVXvA0YI">优化设置:改为0,避免内存信息频繁被回收清空。同时设置“回收 > 特定时间”</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="YuV0dFpY"><strong>进程模型 > 空闲超时操作</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="E9shIoOO">默认是“Terminate”(另一个选项是“Suspend”)。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="b45RviR1">Terminate 表示一旦超时就终止服务,并回收工作进程的缓冲区的内存;</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="x_9Tuhmd">Suspend 则悬停等待,暂不回收缓冲区内存。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="RH0kqqi6"><strong>另外:</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="cMtD66Zb"><strong>CPU超限占用安全方案设置</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="OnLFODxm">CPU限制并不是用于控制每个进程的CPU利用率,而是一种处理发生CPU超限的工作进程的安全方案,这样可以避免工作进程占用CPU过久。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="l44LI194">参考:iis7.0 cpu 限制</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="yVlwzd3v">iis中对cpu限制的操作:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="B5K5Jjyi">1.限制:10000 (以百分比*1000计算,10000则表示10%)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="j0TpnyJw">2.限制操作:1、noaction 无操作 2、KillW3wp 删除进程 并在限制时间内重新开启新进程</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Qf4vLyFP">3.限制间隔(分钟):设置时间限制,多久时间内重启和检测</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="5ppqGpyE"><strong>内存超限回收机制</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LkWahdX3">根据实际运行情况设定 "回收 > 虚拟内存限制" 和 "回收 > 专用内存限制",默认为禁用状态,一般不用为此专门设定。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="RCaV-uaK"><strong>开启|关闭时间限制</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="0cgTE0QF">根据实际运行情况设定,默认90秒。如上图,我都设置为了120秒</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Q-7yS7Dh">进程模型 > 关闭时间限制(秒):为工作进程指定的,完成处理请求并关闭的时间段。如果工作进程超过关闭时间限制,将被终止。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="tfNp4KR2">进程模型 > 启动时间限制(秒):为工作进程指定的,启动并进行初始化的时间段。如果工作进程初始化时间超过启动时间限制,将被终止。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="OxziKzzi"><strong>回收 > 禁用重叠回收</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="wjD2zDEn">默认值 false。应用程序池使用重叠回收方式。在这种方式下,当应用程序池要关闭某个工作进程时,会先创建一个工作进程,直到新的工作进程成功创建后才关闭旧的工作进程;</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Rs5vP1Cn">设置为 true,则先关闭旧的工作进程,然后再创建新的工作进程。 如果Web 应用程序不支持多实例运行,那么你必须配置应用程序池禁止使用重叠回收方式。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="I1-seMVl"><strong>回收 > 生成回收事件条目</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Z6mzVRvE">IIS事件查看器</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="yWlgYf0K">方法一:点击“开始→运行”,输入eventvwr,点击“确定”,就可以打开事件查看器。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="vSLW10Gn">方法二:单击“开始”-“设置”-“控制面板”-“管理工具”-“事件查看器”,开事件查看器窗口。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="o52Sl701">方法三:在“运行”对话框中手工键入“%SystemRoot%/system32/eventvwr.msc /s”打开事件查看器窗口。</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZKR.webp" data-rawwidth="706" data-caption="" data-size="normal" data-rawheight="546" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic4.zhimg.com/v2-c30848f04b75c1cd57b731c011fb2257_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21FZV34.jpg" data-original-token="v2-c30848f04b75c1cd57b731c011fb2257" data-lazy-status="ok" width="706" height="546"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="laS0PpQj"><strong>四、性能</strong></p><p><strong><br/></strong></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21FZX20.webp" data-rawwidth="708" data-caption="" data-size="normal" data-rawheight="371" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-e8b82f58aac30b843ace3ef3d4e9c44e_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21FZ95a.jpg" data-original-token="v2-e8b82f58aac30b843ace3ef3d4e9c44e" data-lazy-status="ok" width="708" height="371"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="nIc00SB0"><strong>关闭IIS日志</strong></p><p><strong><br/></strong></p><p data-pid="QvHF74Qq">当开启记录功能后,IIS会事无巨细地忠实记录所有的web访问记录。这些记录文件的内容是非常庞杂的,比如访问时间、客户端IP、从哪个链接访问、Cookies等,另外还包括 Method(方法),
UserAgent(用户代理)等。这些记录不但占用大量的磁盘空间还大大地影响了web服务器的性能。有人做过评测,停止访问记录可以提升5%到8%的web性能。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="kzI3FHt9"><strong>启用内容过期(客户端缓存)</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="H3VUQQCi">对于静态文件启用内容过期可以提高访问性能。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="B8Outo0J">1、首先网站的目录要划分合理,图片、CSS、JavaScript均放在单独目录下</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="qpQJbhtU">2、然后在IIS中选择要缓存的目录 > HTTP 响应标头 > 设置常用标头 > 设置"web内容过期"策略</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Fgc3Kg4m">如上图webDemo站点,这样,用户浏览器将比较当前日期和截止日期,以便决定是显示缓存页还是从服务器请求更新的页,由于图片、CSS、JS通常变化较少,因此基本上都从本地缓存读取,从而加快显示速度。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="n9BvoXaH">参考:IIS7禁用单个静态文件的客户端缓存</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="CLZwa7YD"><strong>服务器验证缓存</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="3lp0Yktg">IIS自动机制,会在访问css、js等静态文件时,返回给浏览器Last-Modified和Etag标记</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="xXUF9xOD">参考:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="It5tsP9I">浏览器缓存之Last-Modified</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="iw50FFGW">服务端的缓存验证 Last-Modified和Etag</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="eJGHwhpo"><strong>启用Gzip压缩</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="S7esJ-Dg"><strong>IIS 压缩功能使用Gzip算法</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="-q-pV_i4">gzip是HTTP的一种压缩算法,HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或
CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="eWbXpuU3"><strong>五、IIS初始化(预加载),解决(被回收后)第一次访问慢</strong></p><p><br/></p><p data-pid="367M7nxh">设置之后,什么时候会自动初始化?</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="ykc-wPkY">(比如初始化执行 Global.Application_Start 初始化函数)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="74J9fG4W">1)会 - 应用程序池启动、应用程序池回收、cmd->iisreset (w3wp的PID会变)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="gK8V-IHz">2)不会 - 站点重启(IIS站点右键 > 管理网站 > 重新启动)、站点启动</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="a4SN2Gl1">3)不会 - web.config更改引起的应用程序池回收</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="vXBdHxnR">在IIS10版本上测试是上面行为。另外有人IIS8.5上使用也是同样的行为,参考文章。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="XTp_VPA2"><strong>步骤一、</strong>安装IIS应用程序初始化功能</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F9105Y.webp" data-rawwidth="533" data-caption="" data-size="normal" data-rawheight="519" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-05128cbbbb227af3e39771d452b23f96_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F9101W.jpg" data-original-token="v2-05128cbbbb227af3e39771d452b23f96" data-lazy-status="ok" width="533" height="519"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="a-pF1MvX"><strong>步骤二、</strong>设置IIS上应用程序池启动模式</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="oMQzL5uz"><strong>常规 > 启动模式</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LTs_bCpR">默认值:OnDemand(按需运行模式),另外值AlwaysRuning(始终运行模式)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Cw1325uN">优化设置:改为 AlwaysRunning(始终运行)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="GKiHJ_8w"><strong>步骤三、</strong>设置站点预加载</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="lGGXkhe1">在IIS上站点右键 > 管理网站 > 高级设置,把【预加载已启用】设置为true。</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F911604.webp" data-rawwidth="575" data-caption="" data-size="normal" data-rawheight="280" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic2.zhimg.com/v2-2d4b9202199a8217ea75a2e74e9dd615_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F911241.jpg" data-original-token="v2-2d4b9202199a8217ea75a2e74e9dd615" data-lazy-status="ok" width="575" height="280"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="4DnLVQiD"><strong>步骤四、</strong>配置站点 web.config ,添加站点重启后预加载请求的页面</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F912K0.webp" data-rawwidth="575" data-caption="" data-size="normal" data-rawheight="323" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic4.zhimg.com/v2-1f08f2f11b79166dcfaa0217d9454e73_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F9131L.jpg" data-original-token="v2-1f08f2f11b79166dcfaa0217d9454e73" data-lazy-status="ok" width="575" height="323"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F913G6.webp" data-rawwidth="568" data-caption="" data-size="normal" data-rawheight="218" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic1.zhimg.com/v2-b72870c44306b76cc6a68d11308a54d4_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F914232.jpg" data-original-token="v2-b72870c44306b76cc6a68d11308a54d4" data-lazy-status="ok" width="568" height="218"/></figure><p></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F914429.webp" data-rawwidth="562" data-caption="" data-size="normal" data-rawheight="188" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-494f9c16c2d5ed82ebbf6f96d218785a_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F915Y5.jpg" data-original-token="v2-494f9c16c2d5ed82ebbf6f96d218785a" data-lazy-status="ok" width="562" height="188"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="M5wWIXsu">这样操作保存后,IIS会修改 web.config 添加如下内容</p><p class="ztext-empty-paragraph"><br/></p><p><code><system.webServer>
……
<applicationInitialization doAppInitAfterRestart="true">
<add initializationPage="home/about" hostName="" />
</applicationInitialization>
</system.webServer></code></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Cx7pJKfn">如果只是初始化(比如只执行 Global.Application_Start 初始化函数),不需要访问特定API进行额外资源的初始化,则不需要 <add initializationPage="**" /> 子节点</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="P29TgAQ3"><strong>六、并发性</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="yXkjw12f"><strong>常规 > 队列长度</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="3viCrQnw">HTTP.sys 将针对应用程序池排队的最大请求数。默认值1000,最大值65535。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="F8Ue86wy">如果设置太大则会消耗大量的系统资源 ,而设置太小会导致客户端访问时频繁出现"503服务不可用"响应。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="XCzj19nv">优化设置:可先改为 5000(设置为预期最多并发用户数的1.5倍,官方参考:<span class="invisible">https://</span><span class="visible">docs.microsoft.com/zh-c</span><span class="invisible">n/previous-versions/office/communications-server/dd441171(v=office.13)</span><span class="ellipsis"></span></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="2Y36i2DU">使用windows性能监控(性能监控:cmd->perfmon.msc),添加“HTTP Service Request Queues/CurrentQueueSize”指标,观察某个应用程序池当前队列中请求的个数。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="AgtiD9CF"><strong>启用Web园(Web Garden),进程模型 > 最大工作进程数</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Sd-uE-H-">在Web园中你可以配置此应用程序池所使用的最大工作进程数,默认为1,最大可以设置为4000000; 配置使用多个工作进程可以提高该应用程序池处理请求的性能,但是在设置为使用多个工作进程之前,请考虑以下两点:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="pSgOlzu_">1、每一个工作进程都会消耗系统资源和CPU占用率;太多的工作进程会导致系统资源和CPU利用率的急剧消耗;</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="SN-4ZTnR">2、每一个工作进程都具有自己的状态数据,如果Web应用程序依赖于工作进程保存状态数据,那么可能不支持使用多个工作进程。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="tLsll8E8">这样设置,增加了处理进程数,相当于集群,避免大量请求处于排队状态</p><p class="ztext-empty-paragraph"><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="CbYchw3m">文章介绍:使用windows性能监控:cmd->perfmon.msc。监控IIS应用运行情况,再根据需要进行iis参数设置</p><p data-pid="37rvH_ux">Web Service/Current Connections 监控某个应用程序池来指示当前该应用程序池的连接的数量。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="QNzedEyW"><span class="invisible">http://</span><span class="visible">ASP.NET</span><span class="invisible"></span> Apps v4.0.30319/Requests Executing 监控所有的 <span class="invisible">http://</span><span class="visible">ASP.Net</span><span class="invisible"></span> 4.0 正在处理中的请求数量。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="ZYJyFjoD"><span class="invisible">http://</span><span class="visible">ASP.NET</span><span class="invisible"></span> v4.0.30319/Requests Current 与上述类似用于监控 <span class="invisible">http://</span><span class="visible">Asp.Net</span><span class="invisible"></span> 4.0 正在处理中的请求数量。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="hL7MqEd_">HTTP Service Request Queues/CurrentQueueSize 用来监控某个应用程序池当前队列中请求的个数。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="M0FLOTj0"><strong>调整支持并发请求的数量</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="TTKAsDFv">默认支持并发请求数量为:5000</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="L-RsifQf">超出此并发数,会报异常</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="ZJZzM-hN">HTTP Error 503.2 - Service Unavailable</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Qkc5ACRt">The serverRuntime@appConcurrentRequestLimit setting is being exceeded.</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="L78-CuDq">参考:IIS 并发请求设置如何设置?</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="OExvjwON">站点最大并发连接数</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LEq8SENM"><strong>右键站点 > 高级设置 > 限制 > 最大并发连接数</strong></p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F916237.webp" data-rawwidth="562" data-caption="" data-size="normal" data-rawheight="309" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic4.zhimg.com/v2-90b5f60c1c83a067ab7bf561b1bf058f_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F91EV.jpg" data-original-token="v2-90b5f60c1c83a067ab7bf561b1bf058f" data-lazy-status="ok" width="562" height="309"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="P18D2usf">设置站点线程数:minWorkerThreads、maxWorkerThreads、maxIoThreads</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="6M4hjwdB">(感谢园友 @ runliuv 提供的新姿势)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="ulmB7Anh">minWorkerThreads默认1,maxWorkerThreads默认20,maxIoThreads默认20</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="72zvjCVE">1、配置文件:C:\Windows\<span class="invisible">http://</span><span class="visible">Microsoft.NET</span><span class="invisible"></span>\Framework64\v4.0.30319\Config\machine.config</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="stEPh-HF">2、修改参数: <processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" /></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="nLUANVGX">其中:minWorkerThreads = maxWorkerThreads / 2</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="_hncfGDK">参数具体值如何设置,还需要各自对站点进行压力测试中调整</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="r_R9TXtS"><strong>参考:</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="3A4Ufxaz">Improving <span class="invisible">http://</span><span class="visible">ASP.NET</span><span class="invisible"></span> Performance </p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F91LK.png" data-rawwidth="768" data-caption="" data-size="normal" data-rawheight="299" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic2.zhimg.com/v2-9452a830c3a5865580c99415a9544001_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F91H04.png" data-original-token="v2-9452a830c3a5865580c99415a9544001" data-lazy-status="ok" width="768" height="299"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="hvBTAcgi"><strong>七、安全性</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Yd-8eclX"><strong>为不同工作进程指定应用程序池(工作进程隔离模式)</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="GOx_LE_9">一台服务器上有非常多的Web站点。如何才能做到各个站点之间相互独立,不因某些Web站点出现故障而影响其他站点呢?--为不同工作进程指定应用程序池是个很好的解决办法。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="bgcvFBvQ"><strong>进程模型 > 标识,使用ApplicationPoolIdentity虚拟账户</strong></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="dUI0L6Ur">ApplicationPoolIdentity
–
默认情况下,选择“应用程序池标识”帐户。启动应用程序池时动态创建“应用程序池标识”帐户,因此,此帐户对于您的应用程序来说是最安全的。(这样,每个应用程序池都有各自的账户,就避免了木马上传到其中一个池下站点,会对另一个池的文件夹有操作权限)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="o9VLyJfb"><strong>参考:</strong>IIS7.5中神秘的ApplicationPoolIdentity</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="_4ApbdgH">启用快速失败保护</p><p class="ztext-empty-paragraph"><br/></p><p><br/></p><p></p><figure data-size="normal"><img src="https://zhuji.jb51.net/uploads/allimg/20230822/1-230R21F91T45.png" data-rawwidth="576" data-caption="" data-size="normal" data-rawheight="156" class="origin_image zh-lightbox-thumb lazy" data-original="https://pic3.zhimg.com/v2-c6696881a0a69c2e2eb662793d54e626_r.jpg" data-actualsrc="/uploads/allimg/20230822/1-230R21F91cW.png" data-original-token="v2-c6696881a0a69c2e2eb662793d54e626" data-lazy-status="ok" width="576" height="156"/></figure><p></p><p><br/></p><p class="ztext-empty-paragraph"><br/></p><p data-pid="CtRobM6G">如果Web应用程序代码编写有问题,它可能会导致工作进程持续出现问题。默认情况下应用程序池配置为启用快速失败保护,当工作进程在配置的时间段(默认为5分钟)内发生的失败次数超过了配置的值(默认为5次),则禁用此应用程序池。</p><p><br/></p>
頁:
[1]