web服务器连续两次出现CPU达到100%的情况,第一次还想着是升级时,哪个地方写错了,有死循环,最后重启了三次服务器才好。
但事后分析代码,没有死循环的可能,于是在第二次又出现CPU达100%时,仔细检查了一下。
w3wp.exe的CPU占用率达到65%,sql server的CPU占用率达到35%,站点是aspx,服务器上装的是sql server2008,在活动分析器里很快就看出了有三条语句一直在执行,每分钟能达14万次。
这个量显然是不正常的,根据语句分析,可能问题出在某两个页面上面,于是把这个页面先重命名,CPU使用率果然降下来了,在平常的6%~15%之间。
IIS里面站点没有加日志,跟踪不出来,于是加上日志记录后,又把页面名字改成之前的,在CPU100%的情况下,坚持了10分钟,有了记录以后,再次把页面重命名,让站点能正常访问。
把日志下载到本地,用离线日志分析软件一看,有个美国的ip一直在访问那个页面,10分钟之内达到141万次之多。因为这个页面相当于统计用的,一次请求数据库的量比较大,所以它这么一直访问,造成了程序一直调用sql server。
webbench1.5是在Linux下下用的,公司没有环境,在网上又找到windows版本webbench5.0,但试了一下,发现效果和webbench1.5不是太一样。
最后直接在这两个页面上加了,只要请求头包括webbench的,直接阻断,另外加了防刷新功能,一段时间内频繁访问达到一定次数,加入黑名单,限制10分钟以后再允许访问。
采用防御措施后,那个家伙还一直没有动静,也不知道管用不管用,但相信能起到一点作用的,真的还不行,只有对这个ip限制访问站点了