2012-09-24 38 views
19

Estoy usando Supervisor (3.0a12) en ubuntu 12.04 para administrar los trabajadores de php gearman. A veces los trabajadores quedan atrapados en un estado extraño donde usan toneladas de CPU y ram. Mientras estoy resolviendo este problema, pensé que sería bueno que el supervisor matara y actualizara los trabajadores ocasionalmente. Miré a http://supervisord.org/configuration.html la documentación de configuración y no parecía ver ninguna opción que permitiera esto.Tener Supervisord Reiniciar periódicamente procesos secundarios

¿Alguien sabe si es posible tener supervisord reiniciar periódicamente todos los procesos que rige ??

Respuesta

20

El superlance package ofrece un memmon plugin para el supervisor. memmon monitorea el uso de memoria para programas bajo control de supervisor.

configura memmon como un supervisor de EventListener:

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

Los conjuntos de configuración anteriores Memmon para reiniciar cualquier programa bajo control supervisor si se excede el uso de memoria de 200 MB. Verifica cada 60 segundos.

Puede configurar memmon para monitorear programas específicos o grupos de programas, estableciendo límites para cada uno.

+0

Si uso supervisor que utiliza un proceso como "XVFB de gestión", que comienza otro proceso, por ejemplo xulrunner, entonces no Memmon sólo se registra la memoria que está siendo usuario XVFB, o todos los procesos hijos? – CMCDragonkai

+0

Solo supervisará los procesos hijos directos, creo. El manual indica: *** memmon ** es incapaz de monitorear el estado del proceso de procesos que no son procesos ** supervisord ** hijos. * El corrector xul no sería un hijo de supervisord, sino de xvfb-run. –

+0

¿Hay algún problema? – CMCDragonkai

20

Puede usar crontab para pasar comandos directamente a supervisorctl. Por ejemplo, lo siguiente reiniciará un proceso cada 20 minutos.

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

Esto reiniciará el proceso, pero sospecho que también podría matar los posibles procesos finos, por lo que podría provocar la pérdida de datos. (por ejemplo, con procesos de trabajo, no solo aplicaciones sin estado) – tristanbailey

+1

Los procesos mueren por muchas razones: ser robusto contra reinicios inesperados es de todos modos importante. Entonces, si esta estrategia podría causar la pérdida de datos, eso es un error, si usar cron para lograr esto es la solución correcta. – jma

Cuestiones relacionadas