web服务器遇到一个奇怪的问题,在运行的诸多apache2进程中, 会有某个进程, 慢慢占满全部内存, 然后机器就象死了一样,
写了一个自动检查脚本,检查并杀死出问题的apache2进程,问题得到缓解,但是没有解决, 因为慢慢占满内存 ,会使linux释放掉所以的硬盘cache
并且周期性的有性能下降。用RLimitMEM参数限制内存,也不奏效,bw_mod限制流量也不奏效
今天修改了一下脚本, 在杀死出问题的进程之前,先记录此进程连接的外部的ip和端口, 并且修改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 user pid cpu mem other
do
if [ ${mem%\.*} -gt 15 ]
then
ip=$( netstat -npa |grep $pid|tr ':' ' '|awk '{printf $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