您的位置:首页 > 运维架构

一行命令实现监控ROR服务进程的内存占用并自动重启

2009-02-08 13:53 260 查看

自己玩的服务器只有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%

 

代码稍加改造,即可监控其它进程或做成一个通用的进程监控程序。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: