目前我的 sidekiq 经常达到内存阈值。我正在 sidekiq 下对我的流程进行一些更改,以减少完成任务所需的时间。但与此同时,我想知道是否有任何方法可以在我的 sidekiq 工作进程达到某个预定义的内存限制时优雅地终止它,然后重新启动它。
问问题
2157 次
2 回答
1
使用命令查找父进程pid
ps aux | grep sidekiq
然后向父进程发出 USR1 信号。这将让孩子们服务于当前的请求,然后杀死他们
kill -USR1 <pid>
然后像平常一样开始你的sidekiq
于 2013-09-05T13:34:24.783 回答
0
您可以使用MMoni,这是一个 Unix 监控系统,您可以在其中定义每个进程的条件以及在满足条件时要采取的操作,例如(启动、停止或重新启动进程)。
例子:
check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if cpu > 40% for 2 cycles then alert
if totalcpu > 60% for 2 cycles then alert
if totalcpu > 80% for 5 cycles then restart
if mem > 100 MB for 5 cycles then stop
if loadavg(5min) greater than 10.0 for 8 cycles then stop
如果您正在使用 Chef 自动化您的基础架构,那么有一个 mmonit 食谱可以大大简化 mmoni。
更新:我找到了一个关于 Monit 的 Railscast (pro),http: //railscasts.com/episodes/375-monit 。
于 2013-09-05T13:34:44.017 回答