OVH Community, your new community space.

Procesos zombie en apache


pepejlr
02/12/2013, 19:47
¿Usas Debian? ¿Has hecho actualización mayor? (De Squeeze a Wheezy).

Hay problemitas en la configuración de las configs entre actualizaciones y es causado por php5-apache o algún módulo mpm que uses de terceros. Eso me ha pasado y ahora que he mudado de servidor y he reconfigurado Apache de cero no estoy teniendo ningún problema.

PolCPP
02/12/2013, 18:04
Seria buen momento para pasarse a nginx :P

Kilburn
02/12/2013, 15:01
Buenas, como nadie responde me voy a animar yo. A nosotros nos pasó lo mismo durante una temporada. Estuvimos investigando y encontramos un montón de posts con gente a quienes les sucedía algo similar, aunque por multitud de motivos diferentes. En esencia, parece que el problema es que el proceso principal de apache tiene (poco) tiempo para terminar cuando haces un reload/restart (porque mientras está apagando dejas de aceptar peticiones). No obstante, los hijos no los "corta" si haces "apache2ctl reload" o "apache2ctl graceful" (o el equivalente de tu sistema). Más tarde, cuando los hijos terminan, se quedan esperando a que su "padre" recoja su señal de salida (exit code). Como el padre ya murió, ahí se quedan colgaditos y el sistema les llama zombies.

En nuestro caso, la solución que adoptamos fue pasar a usar "apache2ctl stop && apache2ctl start" al reinciar apache. Esto introduce dos problemas: (1) al apagar, si hay alguien a medio descargar le corta por lo sano; y (2) durante un pequeeeeño intervalo de tiempo apache deja de aceptar peticiones (así que les puede salir error de sin conexión a algunos clientes). En nuestro caso no es crítico este tema así que tiramos por lo sano y con esto hemos dejado de tener zombies en el servidor.

La única alternativa real para poder reiniciar apache sin que ningún cliente reciba errores ni tu te encuentres con zombies nunca pasa por mantener dos instancias separadas y un "balanceador" delante. Cuando quieres reiniciar un apache, le indicas al balanceador que pase todas las peticiones al otro. Cuando el primer apache se queda ya sin estar sirviendo ninguna petición reinicias apache, esperas a que levante, y le indicas al balanceador que vuelva a darle peticiones. Luego puedes hacer lo mismo con la otra instancia si también tienes que reiniciarla. Un coñazo pero así son las cosas, por lo menos de acuerdo con nuestra experiencia.

dani81
02/12/2013, 10:13
Buenas a todos,

desde hace un tiempo tengo un problemilla en mi servidor. Apache deja algunos de sus procesos hijos en modo zombie. (1 ó 2). Cuando eso ocurre el rendimiento en general cae bastante.

Sabe alguien, si hay forma de saber la procedencia del proceso o a que petición atiende? O si es normal que estos procesos existan de vez en cuando. Yo creo que no, porque se deben a fallos de programación. Alguna web debe de estar dandome la lata.

La solución hasta ahora es un kill -9 al id de proceso... pero me parece una chapucilla.