В настоящее время мой sidekiq очень часто достигает порога памяти. Я делаю некоторые изменения в моем процессе под sidekiq, чтобы сократить время, затраченное на выполнение задачи. Но тем временем я хотел бы знать, есть ли способ, когда я могу изящно убить рабочий процесс sidekiq, когда он достигнет определенного предопределенного предела памяти, а затем перезапустит его.Как убить работника sidekiq, когда он достиг порога памяти
2
A
ответ
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.