很多年前的项目了。碰到大流量访问的时候,就会发现内存占用很高,而且始终不释放。 最终导致mutex都无法创建,提示磁盘空间已满。其实磁盘还有很多空间。最终排查出来 的原因是ipcs -s输出了很多行。这是因为程序异常退出后没有正确释放相关资源导致的。 因为这个程序在异常退出之后会被反复重启,所以就会出现这个资源被大量占用并导致最 后资源不足的。
因为太老的项目,不想再去深究具体原因,所以写了个脚本,用crontab调用,周期检测, 如果发现资源Ipcs -s输出过多,就清空ipcs -s的内容,然后重启相关进程。
代码如下:
#!/bin/sh
ipcs_line=`ipcs | wc -l`
if [[ ipcs_line -gt 25 ]];then
echo 'find ipcs too much. del it.'
for i in `ipcs -s |awk '{print $2}'`
do
#echo ${i}
ipcrm -s $i
done
else
echo 'not find ipcs too much'
fi
Email: xudongsecret@qq.com