一行命令实现监控ROR服务进程的内存占用并自动重启
自己玩的服务器只有1G内存,服务了4个ROR应用和4个PHP应用,最近老有搜索引擎和不知哪里的程序来拖整个站点,再加上ROR应用未知的内存泄露问题,经常导致服务器内存严重不足,进而造成服务响应过慢,无法登录服务器等后果,痛定之后,写了个1行代码的SHELL脚本来定时监控应用的内存占用情况,如果内存占用超过系统内存的60%,就自动重新启动应用,以释放内存,经过一段时间的使用,效果还可以。
?
以监控服务器上的nfodb应用为例,此应用目录在/www下,以thin -C config/thin.yml start启动:
?
cd /www && /bin/ps -e -o pcpu,pmem,args|grep nfodb|grep -v grep|awk 'BEGIN { t=strftime("%Y-%m-%d %H:%M");cpu=0;mem=0;} { cpu += $1; mem+=$2} END {printf("%s\tCPU=%2.1f%%\tMEM=%2.1f%%\n", t,cpu,mem);if (mem > 60) {print t"\tMEMORY USAGE > 60%, restarting daemon...";system("thin -C config/thin.yml stop"); system("thin -C config/thin.yml start")}}' && cd ->/dev/null
?
在系统crontab里面加上每5分钟调用一次上述代码,则就达到自动监控、记录、重启服务的目的了。
?
执行代码输出为当前时间CPU与内存占用的百分比。如下:
?
2009-02-08 13:25 CPU=0.5% MEM=40.5%2009-02-08 13:30 CPU=0.5% MEM=40.5%2009-02-08 13:35 CPU=0.5% MEM=40.5%
?
代码稍加改造,即可监控其它进程或做成一个通用的进程监控程序。