web伺服器遇到一個奇怪的問題,在運行的諸多apache2進程中, 會有某個進程, 慢慢占滿全部記憶體, 然後機器就象死了一樣,
寫了一個自動檢查腳本,檢查並殺死出問題的apache2進程,問題得到緩解,但是沒有解決, 因為慢慢占滿記憶體 ,會使linux釋放掉所以的硬碟cache
並且週期性的有性能下降。 用RLimitMEM參數限制記憶體,也不奏效,bw_mod限制流量也不奏效
今天修改了一下腳本, 在殺死出問題的進程之前,先記錄此進程連接的外部的ip和埠,&HTTP://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 並且修改apache的日誌格式,增加進程號欄位。
查閱出問題的進程號的access.log日誌,沒發現啥特異的url訪問,
出問題的進程所連接的外部ip,是2個ip,這2個ip的agent欄位聲明它們是來自sogou,是sogou的機器人。
用tcpdump對這2個ip進行抓包(tcpdump host 220.181.94.213 -s0 -w /home/sogou.cap) ,用wireshark看抓包的內容,流量很小,也沒啥特殊的東西。
監控記錄腳本:
#!/bin/sh
while [ 1 ]
do
ps -U www-data -u www-data -U root -u root u |grep apache2 |while read us er pid cpu mem other
do
if [ ${mem%\.*} -gt 15 ]
then
ip=$( netstat -npa |grep $pid|tr ':' ' '|awk '{pri ntf $6}' )
echo `date +%Y-%m-%d:%H:%M:%S` kill pid:$pid cpu:$cpu mem:$mem ip:$ip >>/var/log/apache2/ autokill.log
kill -9 $pid
fi
done
sleep 30
done