当达到内存阈值时,如何杀死sidekiq worker

时间:2013-09-05 12:44:31

标签: ruby-on-rails sidekiq

目前我的sidekiq经常达到内存阈值。我在sidekiq下的流程中进行了一些更改,以减少完成任务所需的时间。但与此同时,我想知道是否有任何方法可以优雅地杀死我的sidekiq工作进程,当它达到某个预定义的内存限制,然后重新启动它。

2 个答案:

答案 0 :(得分:1)

使用命令

查找父进程pid
ps aux | grep sidekiq

然后向父进程发出USR1信号。这将让孩子们服务于当前的请求,然后杀死他们

kill -USR1 <pid>

然后开始你的sidekiq,就像你通常会如何开始一样

答案 1 :(得分:0)

您可以使用MMonit,一个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 cookbook可以大大简化mmonit。

更新:我找到了一个关于Monit的Railscast(专业版),http://railscasts.com/episodes/375-monit