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 restart
cada mitad del día.
Versión larga:
- Estoy ejecutando algunos sitios web (Apache 2.2.22 creado el 12 de julio de 2013) desde un servidor dedicado (Ubuntu 13.04).
- 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.
- No pude encontrar ningún registro anormal en /var/log/apache con respecto al problema.
service apache2 status
informa 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 strafe
en 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".