2012-09-24 12 views
19

Sto utilizzando Supervisor (3.0a12) su ubuntu 12.04 per gestire i lavoratori di php gearman. A volte gli operai vengono catturati in uno stato strano in cui usano tonnellate di CPU e RAM. Mentre sto capendo questo problema ho pensato che sarebbe stato carino avere Supervisor che uccideva e aggiorna i lavoratori ogni tanto. Ho guardato la documentazione di configurazione http://supervisord.org/configuration.html e non sembravo vedere alcuna opzione che consentisse questo.Avere Supervisord Riavvia periodicamente i processi figli

Qualcuno sa se è possibile fare in modo che supervisord riavvii periodicamente tutti i processi gestiti?

risposta

20

Il superlance package offre un memmon plugin per supervisore. memmon monitora l'utilizzo della memoria per i programmi sotto il controllo del supervisore.

si configura come un memmon EventListener supervisor:

[eventlistener:memmon] 
command=memmon -a 200MB 
events=TICK_60 

I set di configurazione di cui sopra Memmon per riavviare qualsiasi programma sotto controllo supervisore se supera l'utilizzo di memoria di 200MB. Controlla ogni 60 secondi.

È possibile configurare memmon per monitorare programmi specifici o gruppi di programmi, impostando i limiti per ciascuno.

+0

Se io uso supervisore che utilizza un processo come "Xvfb-run", che inizia un altro processo, dicono corridore XUL, quindi non Memmon registra solo la memoria che si sta utente Xvfb, o tutti i processi figlio? – CMCDragonkai

+0

Monitorerà solo i processi figli diretti, credo. Il manuale afferma: *** memmon ** non è in grado di monitorare lo stato del processo di processi che non sono ** processi di supervisione ** figlio. * Il xul runner non sarebbe un figlio di supervisord, ma di xvfb-run. –

+0

Ci sono dei problemi? – CMCDragonkai

20

È possibile utilizzare crontab per passare i comandi direttamente a supervisorctl. Ad esempio, quanto segue riavvierà un processo ogni 20 minuti.

0,20,40 * * * * /path/to/supervisorctl restart [supervisor_process] 
+0

Questo riavvierà il processo ma sospetto che potrebbe uccidere possibilmente anche l'esecuzione di processi fini, quindi potrebbe causare una perdita di dati con quelli. (ad esempio con i processi di lavoro, non solo le app stateless) – tristanbailey

+1

I processi muoiono per molte ragioni: essere robusti contro riavvii inaspettati è comunque importante. Quindi, se questa strategia causerebbe la perdita di dati, questo è un bug, se usare o meno cron per ottenere ciò è la soluzione giusta. – jma

Problemi correlati