Debug de Apache ante errores de segmentación

En ocasiones nos encontramos con un comportamiento extraño de Apache, como reinicios aleatorios, que no conseguimos depurar,  pues la única información que observamos en los logs es el error “seg fault or similar nasty error detected in the parent process”

Primeramente, indicar que un error de segmentación es aquel causado por una mala comunicación o inoperatividad con algún módulo del OS que provoca un crash.

Pues bien, existe una forma de depurar estos errores y encontrar la causa de los mismos, para ello, hay que activar un memory dump de Apache, esperar a que haya un Crash para obtener un dump y después analizar  el mismo. Estos dumps no suelen ocupar mucho pero por seguridad se recomienda establecerlos en una partición con suficiente espacio.

Para ello, procedemos a modificar el script de inicio de Apache en /etc/systemd/system/multi-user.target.wants/httpd.service , añadiendo la línea LimitCORE=infinity en el apartado [service] de forma que quede así:

Si tenemos una distribución basada en debian, habría que editar /etc/init.d/apache2 y en la sección do_start() añadir:

Tras esto, relanzamos el daemon:

Ahora, creamos la carpeta donde se van a guardar los dumps, y le damos permisos:

Y modificamos el valor del kernel para que cambie el patrón de los core_dump con el nombre,fecha, proceso, etc:

Ahora, en la configuración de apache, añadimos una línea para que Apache sepa donde dejar los dumps de memoria, para ello editamos el fichero general de configuración: /etc/httpd/conf/httpd.conf

y añadimos:

Ahora, reiniciamos apache2:

Y con esto tenemos Apache preparado para que, con un nuevo fallo, nos deje un memory_dump.

Ahora, si hacemos un kill a algún proceso de Apache o el problema se repite, observaremos que nos deja un fichero con la nomenclatura:

Para analizar el mismo, necesitamos el aplicativo gdb:

Y lanzamos el comando gdb, llamando al binario de apache2, y al core_dump:

y por último, una vez estemos dentro de gdb, escribimos en pantalla los comandos:

Y obtendremos la traza completa del dump para ser analizada.

¡Mucha Suerte!

Deja un comentario

Tu email nunca se publicará.