2013-09-05 5 views
2

В настоящее время мой sidekiq очень часто достигает порога памяти. Я делаю некоторые изменения в моем процессе под sidekiq, чтобы сократить время, затраченное на выполнение задачи. Но тем временем я хотел бы знать, есть ли способ, когда я могу изящно убить рабочий процесс sidekiq, когда он достигнет определенного предопределенного предела памяти, а затем перезапустит его.Как убить работника sidekiq, когда он достиг порога памяти

ответ

1

Найти родительский процесс PID с помощью команды

ps aux | grep sidekiq 

Затем выдавать USR1 сигнал на родительский процесс. Это позволит детям обслуживать текущие запросы, а затем убить их

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 

Если вы автоматизации инфраструктуры с Chef, есть mmonit поваренной что упрощает mmonit значительно.

ОБНОВЛЕНИЕ: Я нашел Railscast (pro) о Monit, http://railscasts.com/episodes/375-monit.