服务器有时会因为一个站点占用CPU过高而导致所在的应用程序池关闭或机器运行非常缓慢,
想解决这个问题就得找出是哪个网站占用CPU比较大,我的想法是对每个站点进行监控,但当前水平本人还无法实现这个功能(应该很简单,使用wmi实现),
我以前的处理方法是:如果服务器只有一个应用程序池的话,先把他分为多个,然后看哪个进程CPU占用高,一步一步的合并或拆分应用程序池,最终找到那个占CPU高的。理论上说起来容易,但真正实现起来就不那么容易了。
实现过程及原理:IIS6可以的所有配置文件都放在“C:\WINDOWS\system32\inetsrv\MetaBase.xml”里,所以只要对这个文件进行处理就可以了,但是个文本文件,所以可以说成:对这个文本文件进行处理就可以了,我们用Emeditor文件处理软件来处理,因为他支持正则表达式及宏,是本人处理文本之首选。
1. 1个应用程序池分为N的方法:从头找,找到前100个都替换成test001,前101-200个替换成test002.......这样便实现了
例:
for i=1 to 100
if i<=4 then
document.selection.Replace "AppPoolId=" & Chr(34) & "test002" & Chr(34),"AppPoolId=" & Chr(34) & "test001" & Chr(34),eeFindNext
end if
if i>4 and i<=8 then
document.selection.Replace "AppPoolId=" & Chr(34) & "test002" & Chr(34),"AppPoolId=" & Chr(34) & "test003" & Chr(34),eeFindNext
end if
if i>8 and i<=12 then
document.selection.Replace "AppPoolId=" & Chr(34) & "test002" & Chr(34),"AppPoolId=" & Chr(34) & "test004" & Chr(34),eeFindNext
end if
next
2. N个应用程序池合并为1个的方法:用正则匹配,所有符合条件的替换成test001等
例:
document.selection.Replace "AppPoolId=" & Chr(34) & "(test001|test002|test003|test004)" & Chr(34),"AppPoolId=" & Chr(34) & "test005" & Chr(34),eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp
以上两例可以命名为1-to-n.vbee 和n-to-1.vbee加入到Emeditor 宏里,备用,具体使用时根据情况还得修改。
以上提供的只是实现的方法如果真要操作的话,您得考虑到尽量不影响用户使用的情况下进行,本人进行所有改动操作一般都在2分钟以内,如果条件允许可以在一分钟内完成。因为宏是写好的,只要把IIS停掉,然后对文件进行宏处理就可以了,停IIS的时间比较长点。为了安全起见,我们每次对IIS6配置文件进行处理前得先备份一下,我用以下代码来完成
set year=%date:~0,4%
set month1=%date:~5,1%
set month2=%date:~6,1%
set day1=%date:~8,1%
set day2=%date:~9,1%
set tm1=%time:~0,2%
set tm2=%time:~3,2%
set tm3=%time:~6,2%
copy C:\WINDOWS\system32\inetsrv\MetaBase.xml %year%%month1%%month2%%day1%%day2%%tm1%%tm2%%tm2%MetaBase.xml
"C:\Program Files\EmEditor\EmEditor.exe" C:\WINDOWS\system32\inetsrv\MetaBase.xml
这段是dos批处理代码,执行的操作是:在IIS6停止以后把IIS6的配置文件COPY出来,命名为年月日时分秒这样的格式,以做备份,然后再用Emeditor编辑软件打开IIS6配置文件。这样写后操作基本上都是程序来批量实现了,效率非常高。打开IIS6的配置文件后选择宏下边的1-to-n.或n-to-1.来完成修改操作。
OK讲完了。把我都说晕了,因为不同水平的人看都可能会有各种问题,我也不可能写的非常细,所以,挑自己能看懂的看吧。如果您受不了这个,我建议您学wmi自己开发程序来实现。应该比这个快,也实用。我只能有空再研究wmi了。
最后强烈推荐学习:VBS 正则表达式 Emeditor Emeditor宏
原创作者:柳永法(yongfa365)'Blog
引用:
IIS 6 应用程序池 一个分为多个 多个合为一个 Emeditor Macro宏实现http://www.yongfa365.com/item/IIS6-Application-Pool-Nto1-1toN-yongfa365.html