Nuestro servidor ocasionalmente se niega a mostrar una página HTML simple.
Esto sucede durante un número relativamente alto de solicitudes. Sin embargo, el procesador no está muy cargado y hay mucha memoria libre. El error parece ocurrir en 1 de cada 50 solicitudes en promedio, dependiendo de la carga del servidor.
Necesito encontrar el origen del problema y tomar las medidas adecuadas para eliminarlo.
Sospecho que el origen del problema es una gran cantidad de paquetes de red entrantes. En promedio, hay 5000 paquetes por segundo. Tráfico: 2 MBits/seg. ¿Puede ser esta la causa del error?
Hay algo interesante: en caso de que el servidor no responda, Apache no registra la cadena de solicitud en access.log.
El error se repite desde varias computadoras cliente. DNS no está involucrado, ya que accedí al servidor por la IP.
He perfilado el caso del problema con la utilidad tcpdump. Estas son las sesiones buenas y malas rastreadas por tcpdump. La solicitud es la misma en ambos experimentos. Bien: el servidor devuelve respuesta. Malo: no hay respuesta, error de tiempo de espera.
---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------
---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------
Hoster: Excelente Hosting
SO: Ubuntu
Parámetros del servidor: E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ
Este es un enlace al archivo de configuración de Apache que utilizamos.http://repkin5.snow.prohosting.com/apache.txt
Este es un informe del estado del servidor tomado inmediatamente después de un error de tiempo de espera.http://repkin5.snow.prohosting.com/server-status.htmSolo quedan 10 servidores secundarios de 120, por lo que hay suficiente espacio para nuevas solicitudes.
VMSTAT
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 8900 725900 8468 65684 0 0 5 18 11 33 4 3 92 1
Respuesta1
- Hay algo interesante: en caso de que el servidor no responda, Apache no registra la cadena de solicitud en access.log.
Esto suena como un problema de red. El servidor debería registrar cualquier solicitud que reciba incluso si no puede responder por algún motivo. Es posible que desees verificar que no estés viendo pérdida de paquetes en el servidor web.
Respuesta2
Existe una pequeña posibilidad de que se encuentre en una posición en la que los buffers del kernel disponibles para las conexiones TCP sean bajos. Esperaría algo de registro a partir de eso (inicie sesión en el servidor, pruebe hasta que "no haya respuesta", luego ejecute dmesg
y vea si algo parece aplicable).
Para ajustar la configuración de la red,este puede ser un punto de partida.
Como dijo Chris Nava, probablemente valga la pena asegurarse de que no solo se están perdiendo paquetes en la red, así que comience a verificar usando ping (responder a un ping no es, por desgracia, lo mismo que lidiar con un paquete TCP). ).