目前我的sidekiq经常达到内存阈值。我在sidekiq下的流程中进行了一些更改,以减少完成任务所需的时间。但与此同时,我想知道是否有任何方法可以优雅地杀死我的sidekiq工作进程,当它达到某个预定义的内存限制,然后重新启动它。
答案 0 :(得分:1)
使用命令
查找父进程pidps 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。