故障描述:服务器非常慢,打开任务管理器,发现CPU占用率非常高。在“进程”选项卡中按CPU排序,发现某个w3wp.exe进程占用CPU很大。实际上,进程中的每个w3wp.exe就对应着IIS中的每个应用程序池。
解决方案:
1、我们打开任务管理器,让PID(进程标识符)显示出来。点击“查看”->“选择列”,然后勾选上PID就可以显示出来了。下一步就是找到PID和进程池的对应关系,先判断出是哪个进程池出了问题,然后再分析进程池里面的网站。
2、我们在桌面上新建一个文本文档,内容如下:
'显示所有应用程序池编号 www.925.cc 七彩科技提供
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set ps = objWMIService.ExecQuery("select * from Win32_Process where Name='w3wp.exe'")
Str="AppPoolId AppPoolName" & vbcrlf
For Each ps in ps
Str = Str & " " & ps.ProcessId & Space(10-len(ps.ProcessId)) & GetAppPoolId(ps.commandline) & vbcrlf
Next
WScript.Echo Str
Function GetAppPoolId(strArg)
On Error Resume Next
Dim Submatches,strPoolId,re,Matches
Set re = New RegExp
re.Pattern = "-ap ""(.+)"""
re.IgnoreCase = True
Set Matches = re.Execute(strArg)
Set SubMatches = Matches(0).Submatches
strPoolId = Submatches(0)
GetAppPoolId = strPoolId
End Function
然后保存,并重命名为getapp.vbs。注意必须是vbs文件后缀,再双击执行,就可以弹出一个PID和进程池名称的对应表,如下图:
3、这时我们就可以轻易看到是哪个应用程序池出了问题了。接下来,为了让服务器尽快恢复正常,我们可以在任务管理器里面把这个有问题的进程给结束了,然后把对应的进程池也给停止了。
这里顺便说一下,我们在管理网站的时候,要尽可能的把网站分散到多个应用程序池中,一般每个进程池不超过15个为宜。这样做的好处就是网站可以分类管理,我们停止了某个进程池,只会影响到这个进程池下的网站,而不会影响到其他网站。如果把全部网站都放到一个进程池中,一旦这个进程池出问题,影响的网站数量也非常多。
4、现在进程池是查出来了,那么到底是进程池中的哪个网站引起的呢?我们可以通过分析IIS的错误日志来发现具体网站。其原理是,之所以w3wp.exe进程占用大量CPU,是因为有人在访问某个网站,而我们把进程结束之后,别人的访问仍然是继续的,这样就会在IIS日志中留下访问报错记录。
停止进程池几分钟后,我们到C:\WINDOWS\system32\LogFiles\HTTPERR这个目录中,根据修改日期排序,打开最新生成的错误日志(比如上图中的2255.log)。假设我们禁用的进程池名称是AAA,那么搜索Disabled AAA,就可以查到关闭进程池后,有哪些网页被访问过了,而这些访问的网站就很可能是造成问题的元凶。
5、最近经常出现的DEDECMS漏洞,就是由黑客植入的PHP的文件造成的。黑客首先把病毒代码植入空间中,然后不停的访问他们,造成服务器对外发包,而且CPU巨大。解决办法就是先清空整个网站,然后升级到最新版本的DEDECMS程序就好了。IIS的错误日志类似如下的情况:
80 HTTP/1.1 GET /plus/ddos.php?host=112.101.64.75&port=80&time=60 503 785 Disabled AAA
这条日志表明,是785号网站引起的。然后我们在IIS中,找到标识符为785号的网站,临时关闭或者联系客户进一步检查程序。
本文系作者辛苦写作所得,转载请留下版权链接:本文转载自七彩科技(www.925.top) 帮助系统(http://www.925.cc)感激不尽!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。