六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 14|回复: 0

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

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-2-4 19:56:07 | 显示全部楼层 |阅读模式
自己玩的服务器只有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% 
代码稍加改造,即可监控其它进程或做成一个通用的进程监控程序。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表