2

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

4

2 回答 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 回答