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限制訪問站點了