如何限制虚拟主机可使用的CPU资源
2016-04-12 15:10
344 查看
使用IIS 6.0运营虚拟主机的朋友们都会碰到这样一个问题,当某个网站占用大量CPU资源时,会把整个服务器都拖慢了,影响服务器上其他网站的访问速度,客户们的投诉也让系统管理员倍感头疼。我们知道,从IIS 6.0开始,微软引入了应用程序池的概念,也就是把多个网站分组放置到不同的“池子”中。作为系统管理员,可以自由调整每个程序池中的网站,也可以随意把某个站点在各个进程池之间进行迁移。
![](https://images2015.cnblogs.com/blog/820134/201604/820134-20160412150840270-1438052925.jpg)
传统解决方案
当某个站点消耗大量CPU时,其所在的应用程序池w3wp.exe的CPU值会随之飙升。在传统的IIS 6.0的环境下,我们只能先根据任务管理器中的PID值判断出是哪个应用程序池造成的,结束对应的w3wp进程,再停止该应用程序池。然后使用二分法,把该程序池中的网站分一半到其他程序池,再观察,等问题网站发作后再反复执行上述的操作。这个过程耗时耗力,要揪出目标网站可能需要几天甚至一周左右。那么新版的IIS 8.0是否能更完美的解决这个问题呢?
实际上,微软从IIS 7.0起就开发了CPU Throttlling(CPU扼喉)功能,基本采用了上面预想的方法2,可以事先对每个程序池进行CPU限制,未雨绸缪,一旦出现问题站点,最多只影响同在一个程序池的其他用户,而不会造成整机故障。到了IIS 8.0时代,这个功能变得更加细致,下面我就来剖析新版IIS 8.0的CPU限制策略。
操作步骤分析
1、选择应用程序池操作面板上的“高级设置”。
![](https://images2015.cnblogs.com/blog/820134/201604/820134-20160412150912504-1441489849.jpg)
2、秘密就在“CPU”栏目下的“限制(百分比)”和“限制操作”这两项。首先说明下第一项百分比,假如我们想限制这个程序池的CPU为10%,那么应该填写10000,即10*1000,这个地方要特别注意。
![](https://images2015.cnblogs.com/blog/820134/201604/820134-20160412150944316-1386939560.jpg)
关于“限制(百分比)”这项,微软的官方解释是:限制(百分比)设置了应用程序池中的工作进程(即w3wp.exe)在“限制间隔“(默认5分钟)的时间段内使用CPU时间的最大百分比。如果超出这个限制,系统将记录到事件日志中,并且触发限制操作中的某个可选事件。
默认的限制(百分比)为0,表示不进行任何CPU限制,而不是把CPU限制为0。
3、接下来就是最关键的限制操作项了。这个项中有4种选择,分别阐述如下。
NoAction:超出限制后,除了写入事件日志之外,不执行任何操作。
KillW3WP:超出限制后,关闭应用程序池。我们不推荐使用此项,因为出现问题站点是无法预期的,如果贸然关闭,既无法进一步判断问题站点,也会造成网站无法打开,引起其他客户的抱怨。
Throttle:将CPU严格限制为百分比中的数值。问题站点发作时,会影响同一程序池下的其他网站。
ThrottleUnderLoad:只有在系统CPU资源不足时,才开始限制CPU使用率。举例说明,假如当前系统CPU为10%,设置某程序池限制CPU为20%,问题站点占用CPU为30%。这时仍然不会限制CPU使用,因为总的CPU才40%,系统资源仍然绰绰有余。
我们推荐采用Throttle或ThrottleUnderLoad,根据经验,ASP或ASP.NET网站可以直接使用Throttle限制,某些PHP网站占用CPU较高,采用Throttle限制后网站打开速度不理想,这时可以采用ThrottleUnderLoad。
![](https://images2015.cnblogs.com/blog/820134/201604/820134-20160412150840270-1438052925.jpg)
传统解决方案
当某个站点消耗大量CPU时,其所在的应用程序池w3wp.exe的CPU值会随之飙升。在传统的IIS 6.0的环境下,我们只能先根据任务管理器中的PID值判断出是哪个应用程序池造成的,结束对应的w3wp进程,再停止该应用程序池。然后使用二分法,把该程序池中的网站分一半到其他程序池,再观察,等问题网站发作后再反复执行上述的操作。这个过程耗时耗力,要揪出目标网站可能需要几天甚至一周左右。那么新版的IIS 8.0是否能更完美的解决这个问题呢?
实际上,微软从IIS 7.0起就开发了CPU Throttlling(CPU扼喉)功能,基本采用了上面预想的方法2,可以事先对每个程序池进行CPU限制,未雨绸缪,一旦出现问题站点,最多只影响同在一个程序池的其他用户,而不会造成整机故障。到了IIS 8.0时代,这个功能变得更加细致,下面我就来剖析新版IIS 8.0的CPU限制策略。
操作步骤分析
1、选择应用程序池操作面板上的“高级设置”。
![](https://images2015.cnblogs.com/blog/820134/201604/820134-20160412150912504-1441489849.jpg)
2、秘密就在“CPU”栏目下的“限制(百分比)”和“限制操作”这两项。首先说明下第一项百分比,假如我们想限制这个程序池的CPU为10%,那么应该填写10000,即10*1000,这个地方要特别注意。
![](https://images2015.cnblogs.com/blog/820134/201604/820134-20160412150944316-1386939560.jpg)
关于“限制(百分比)”这项,微软的官方解释是:限制(百分比)设置了应用程序池中的工作进程(即w3wp.exe)在“限制间隔“(默认5分钟)的时间段内使用CPU时间的最大百分比。如果超出这个限制,系统将记录到事件日志中,并且触发限制操作中的某个可选事件。
默认的限制(百分比)为0,表示不进行任何CPU限制,而不是把CPU限制为0。
3、接下来就是最关键的限制操作项了。这个项中有4种选择,分别阐述如下。
NoAction:超出限制后,除了写入事件日志之外,不执行任何操作。
KillW3WP:超出限制后,关闭应用程序池。我们不推荐使用此项,因为出现问题站点是无法预期的,如果贸然关闭,既无法进一步判断问题站点,也会造成网站无法打开,引起其他客户的抱怨。
Throttle:将CPU严格限制为百分比中的数值。问题站点发作时,会影响同一程序池下的其他网站。
ThrottleUnderLoad:只有在系统CPU资源不足时,才开始限制CPU使用率。举例说明,假如当前系统CPU为10%,设置某程序池限制CPU为20%,问题站点占用CPU为30%。这时仍然不会限制CPU使用,因为总的CPU才40%,系统资源仍然绰绰有余。
我们推荐采用Throttle或ThrottleUnderLoad,根据经验,ASP或ASP.NET网站可以直接使用Throttle限制,某些PHP网站占用CPU较高,采用Throttle限制后网站打开速度不理想,这时可以采用ThrottleUnderLoad。
相关文章推荐
- 重构一个运行超过10年的老项目
- Android学习之创建中间缓存文件,处理文件名重复问题
- C++ 组合数求法(小范围)
- swift版视频录制后格式转换,转载请声明
- 《程序员面试白皮书》关于链表的问题编程实践
- iOS更改状态栏颜色为白色
- Jasperreport 与Springmvc结合生成PDF web页面笔记(含解决中文问题)
- oracle——SQL复习10
- 《排序算法》选择排序
- HDU 2444 二分图判断+最大匹配
- 2015最流行的android组件、工具、框架大全(前续)
- php生成二维码
- Android开发中一些挺有用的方法
- 【BZOJ 1088 扫雷Mine】模拟
- jquery 对option 操作
- 决策树中ID3、C4.5、CART
- iOS-OC-让tableview滚动到顶部 滚动到底部
- .naturalWidth 和naturalHeight属性,
- 使用canvas实现擦玻璃效果---转载
- html5拖拽