Semáforos y Apache Web Server.

El proceso de diagnóstico de errores en Infraestructura es de lo más divertido. Es como ser un pestilente detective sacado de las novelas negras de John Conolly o Rafaél Bernal, con la consigna de resolver cripticas situaciones donde el tiempo juega en nuestra contra.

Bitácoras.

La primera vez que me encontré con las siguientes líneas de log de Apache me quedé sin palabras.
[Fri Feb 22 02:54:24 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 22 02:54:24 2013] [notice] Digest: generating secret for digest authentication …
[Fri Feb 22 02:54:24 2013] [notice] Digest: done
Configuration Failed
[Fri Feb 22 02:54:57 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 22 02:54:57 2013] [notice] Digest: generating secret for digest authentication …
[Fri Feb 22 02:54:57 2013] [notice] Digest: done
Configuration Failed
Lo primero que pensé es que era un tema con SELinux, sin embargo, rápido deseché la posibilidad mirando las bitácoras. Lo siguiente que buscamos es cambios recientes en las configuraciones, pretendiendo poner el ojo sobre algún cambio que no le gustará a Apache. Tampoco.
Leyendo un poco en foros, eché un vistazo en los semáforos, apoyado con el comando de GNU/Linux ipcs.
Salida del comando ipcs -s
A modo de resumen, los semáforos son contadores que funcionan en la intercomunicación entre procesos, cuyo objetivo es mantener los recursos compartidos consistentes , por tal motivo, las operaciones de incremento o decremento de los contadores son atómicos. Una implementación pobre puede genera condiciones de carrera, lo cual derivaría en corrupción de datos. Esta tarea es mantenida por el kernel de Linux.

Solución.

Apache Web Server utiliza semáforos para la comunicación de procesos, por lo tanto, si se baja el proceso de manera disrruptiva puede ocasionar que Apache deje semáforos perdidos, los cuales deben ser limpiados por el SysAdmin.
La solución es sumamente sencilla. Como root ejecutamos el siguiente listado de comandos en la terminal.
ipcs -s | grep apache | awk ‘{print $2;}’ | while read -r line; do ipcrm sem “$line”; done
Desglosando la línea anterior podemos decir:
ipcs -s => Muestra los semáforos en el sistema.
grep apache => Es el usuario con el que está corriendo Apache. Este usuario puede cambiar dependiendo el sistema operativo y la configuración.
awk ‘{print $2;}’ => Imprime la segunda columna, es decir, semid.
while read -r line; do =>Un blucle para leer todos los semáforos filtrados previamente.
ipcrm sem => Remueve comunicaciones entre procesos y sus estructuras de datos asociadas. En este caso, solo serán los semáforos.

Conclusión.

Espero que con esta pequeña guía puedan resolver este tipo de problemas, además de saber un poco más sobre la importancia de los semáforos en el ciclo de vida del software que corre dentro de GNU/Linux.

Comentarios

Entradas populares de este blog

Análisis de conexiones TIME_WAIT

Agregar un usuario a un grupo secundario

Pluging de HAProxy para Collectd.