apache2内存占用过高
2011-01-15    刘世伟   
打印自: 安恒公司
地址: HTTP://wi-fi.anheng.com.cn/news/article.php?articleid=2305
apache2内存占用过高
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


责任编辑: admin