2013-09-05 26 views
2

目前我的sidekiq經常達到內存閾值。我在sidekiq下的流程中進行了一些更改,以減少完成任務所需的時間。但在此期間,我想知道是否有任何方法可以在我的sidekiq工作進程達到某些預定義的內存限制時優雅地殺死它,然後重新啓動它。我該如何在達到內存閾值時殺死sidekiq worker

回答

1

使用命令

ps aux | grep sidekiq 

然後發出USR1信號父進程查找父進程的PID。這將讓孩子成爲當前請求,然後殺死他們

kill -USR1 <pid> 

,然後開始你的sidekiq怎麼樣,你通常會開始

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 

如果要自動大廚您的基礎設施,有一個mmonit食譜從而簡化mmonit增色不少。

UPDATE:我發現了一個關於Monit的Railscast(專業版),http://railscasts.com/episodes/375-monit