Diagnóstico de un error 502 en un servidor web

Se observó un aumento repentino de errores 502 en producción, lo que inició un proceso de análisis para identificar la causa raíz.

  1. Verificación inicial de la conexión TCP

Primero se sospechó de un tiempo de excedido en la conexión TCP entre el balanceador de carga y los servidores backend, causando desconexiones. Para validar esta hipótesis, se capturó tráfico de red utilizando tcpdump:

tcpdump -i ens3 host 192.168.1.100 and tcp port 80 -w /tmp/captura.pcap

El aálisis mostró que el cliente completó exitosamente la solicitud POST antes de que el servidor iniciara el cierre de conexión con FIN. Esto indicó que el servidor había procesado la petición, pero falló en algún punto.

  1. Revisión de registros de error de Apache

Se revisó el archivo de registro de errores de Apache, ubicado según la configuración:

# En httpd.conf
ErrorLog "/var/log/httpd/error_log"

No se encontraron mensajes útiles para identificar el problema, por lo que se decidió habilitar el análisis de volcados de núcleo (core dumps).

  1. Configuración de volcados de núcleo

3.1 Habilitar la generación de archivos core

Se verificó y ajustó el límite de tamaño para archivos core:

# Comprobar estado actual
ulimit -c

# Establecer límite temporal
ulimit -c 1024
# o
ulimit -c unlimited

3.2 Definir ruta y formato de archivos core

Se configuró el patrón de nombres y ubicación para los volcados:

# Modificación temporal
echo "/var/log/coredumps/%e.core.%s.%p.%h.%t" > /proc/sys/kernel/core_pattern
echo 1 > /proc/sys/kernel/core_uses_pid

# Modificación permanente en /etc/sysctl.conf
kernel.core_pattern = /var/log/coredumps/%e.core.%s.%p.%h.%t
kernel.core_uses_pid = 1
# Aplicar cambios
sysctl -p

3.3 Crear directorio y asignar permisos

Se preparó el entorno para Apache:

mkdir -p /var/log/coredumps
chown apache:apache /var/log/coredumps

# En httpd.conf
CoreDumpDirectory /var/log/coredumps

Se reinició el servicio Apache con un reinicio complteo (stop y start) para aplicar los cambios.

  1. Análisis del volcado de núcleo

Se generó un archivo core durante un fallo y se analizó con GDB. Se aseguró de tener los símbolos de depuración instalados:

gdb /usr/sbin/httpd /var/log/coredumps/httpd.core.6.14582.server1.1672500000

Dentro de GDB, se ejecutó el comando bt full para obtener un rastreo detallado de la pila. Tras examinar la salida, se localizó la causa del error en el código de la aplicación. Se realizó una prueba en entorno controlado y se confirmó el problema, que fue corregido subsanando los errores 502.

Etiquetas: Apache linux tcp coredump GDB

Publicado el 6-14 02:56