El servidor Apache2 deja de responder

El servidor Apache2 deja de responder

Estoy buscando sugerencias sobre dónde debo profundizar más.

En breve, el servidor Apache2 deja de atender solicitudes después de 2 a 15 horas de haberse iniciado. Como resultado tengo que hacerlo service apache2 restartcada mitad del día.

Versión larga:

  1. Estoy ejecutando algunos sitios web (Apache 2.2.22 creado el 12 de julio de 2013) desde un servidor dedicado (Ubuntu 13.04).
  2. El servidor Apache2 se estuvo comportando bien durante más de medio año, ahora, de repente, deja de procesar solicitudes en todos los sitios web (que tienen alrededor de 5 sitios) hasta que se reinicia el proceso de Apache.
  3. No pude encontrar ningún registro anormal en /var/log/apache con respecto al problema.
  4. service apache2 statusinforma que el proceso se está ejecutando

Estaré encantado de escuchar sus sugerencias y saber qué debo hacer en mi situación.

ACTUALIZAR:

Correr netstat -an | grep 80:

tcp6       0      0 :::80                   :::*                    LISTEN
tcp6     325      0 SERV_IP:80       IP_A:35514     CLOSE_WAIT
tcp6     332      0 SERV_IP:80       IP_B:34198     CLOSE_WAIT
tcp6     379      0 SERV_IP:80       IP_C:57859     CLOSE_WAIT
tcp6       0      0 SERV_IP:80       IP_A:35060     CLOSE_WAIT
tcp6     360      0 SERV_IP:80       IP_A:38481     CLOSE_WAIT
tcp6     466      0 SERV_IP:80       IP_B:56324     CLOSE_WAIT
tcp6     361      0 SERV_IP:80       IP_A:53466     CLOSE_WAIT
tcp6       1      0 SERV_IP:80       IP_A:38102     CLOSE_WAIT
tcp6     196      0 SERV_IP:80       IP_E:58125     ESTABLISHED

y más entradas como estas, alrededor de 150 en total.

ps aux | grep apache:

root      2968  0.0  0.0 452240 21116 ?        Ss   16:08   0:01 /usr/sbin/apache2 -k start
www-data  5217  0.0  0.0 463584 23820 ?        S    17:04   0:03 /usr/sbin/apache2 -k start

Hay alrededor de 120 de las líneas posteriores (www-data), así que supongo que 120 procesos de Apache.

Usando strafeen el proceso raíz de Apache2:

 sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0

Usando en uno de los procesos www-data:

sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX

Vaya, me parece que de alguna manera los procesos de Apache se atascan y, una vez que se excede el límite máximo de conexión, deja de crear nuevas instancias. ¿Pero por qué se quedan estancados?

htop, iotop, jnettop no reportan ninguna anomalía. (sin sobrecarga)

ACTUALIZACIÓN2: El servidor ya no falla durante los últimos dos días. Así que no puedo obtener más información. En cambio, agradezco su ayuda y acepto la respuesta. Una vez que haya más información disponible, dejaré un enlace a una nueva pregunta con un cuerpo mejor construido. Gracias

Respuesta1

No importa qué informe el "estado del servicio apache2", ¿ve procesos de apache cuando hace ps aux?

¿Puedes hacer un netstat -n cuando ocurre el problema? Tal vez se quede sin recursos, por ejemplo, descriptores de archivos, o puede que tenga demasiadas conexiones abiertas.

Durante el problema, ¿tiene una alta utilización de la CPU? ¿Quizás el sistema se queda sin memoria y está fallando?

¿El servidor http responde con la conexión rechazada o la conexión simplemente se agota?

En el último caso, sugeriría hacer strace -f -p [apachepid] y podrá descubrir qué llamada al sistema está bloqueando la solicitud. En el primero, probablemente Apache se haya estrellado.

¿Utiliza un proxy para Tomcat u otro servidor de aplicaciones o sirve HTML estático simple?

¿Has configurado la autenticación? por ejemplo, tal vez algo salga mal en la capa de autenticación

ACTUALIZAR:

En la segunda línea veo este rebaño (40,LOCK_EX ¿Quizás los procesos intentan obtener un bloqueo exclusivo en alguna parte? ¿Puedes hacer lsof -n -p 8554 (o cualquier pid que intente agruparse) y ver qué archivo intenta bloquear (40 es el descriptor del archivo). También puede "ls /proc/8554/fd".

información relacionada