记录一次web服务器的CPU飙升故障排除
1. 故障:
两台web服务器的经过一段时间CPU持续升高,最后升到100%,就是降不下来。
web服务器使用的是IIS6.0,通过查看进程ID(iisapp -a),确认是某个应用程序池导致CPU升高。
后来,把该应用程序池,执行了一下回收,CPU降下去了,但是一个小时之后,CPU又开始上升。
2. 问题分析:
1. CPU持续升高,怀疑是web服务器在读写数据库文件时,产生大的IO。
于是就在各个数据库服务器上查看CPU/内存/磁盘IO/网络IO,没有发现大的变化。
又查看数据库日志文件error.log发现没有什么异常。
开启trace跟踪死锁,也没有发现死锁的问题。
2. 开始分析数据库的事件探查,查看是不是有执行耗时较长的语句,结果没有什么大耗时的语句;但是发现了大量insert into语句和update语句。
3. 根据查找到的sql语句定位到具体的功能页面,使用SearchandReplace工具。(在线考试和主观作业)
4. 分析TMG2010的webproxy日志,查找CPU高的时间段每个IP访问功能页面的次数,得到十几个IP地址,然后把这些IP地址放到了cmrrecord黑名单,结果CPU的问题依然存在。(排除被恶意攻击)
5. 分析TMG2010的webproxy日志的processingtime字段,发现很多processingtime达到1800秒,返回给客户端1460错误码。
关于TMG2010的webproxy日志字段,在文章的最后部分。
详细的分析其中一个IP地址,分析他的整个操作流程,发现他进入在线考试页面的时候,提交试卷的时候有1460错误码。
下面是一个简单的客户端请求流程图。

webproxy字段解释:
https://technet.microsoft.com/en-us/library/cc441708.aspx
webproxy result code log values
https://technet.microsoft.com/en-us/library/cc441734.aspx
0 顺利完成作业。 1460 由于超时时间已过,该操作返回。防火墙主动断开 超过1800秒 64 刷新未结束关闭 10054 刷新未结束再刷新,远程主机(客户端)强迫关闭了一个连接,服务器返回10054错误。 200 正常。 201 已建立。 202已接受。 204无内容。 301已永久移动。 302已暂时移动。 304未修改。 400错误的要求。 401未授权。 403禁止。 404找不到。 500服务器错误。 501未实作。 502错误网关。 503资源用尽。 995作业中止。 10060联机逾时。 10061联机被目的主机拒绝。 10065没有到主机的路由。 11001找不到主机。 12217要求被 HTTP 筛选器拒绝。

浙公网安备 33010602011771号