¿Por qué un servidor web puede no responder?

¿Por qué un servidor web puede no responder?

Alojamos nuestro servicio web en un servidor dedicado. Durante el período de alta carga, el servidor devuelve con mucha frecuencia un error de tiempo de espera en lugar de una página. Tenemos alrededor de 170.000 solicitudes diarias. Sin embargo, el servidor tiene mucha memoria libre y la CPU no está cargada en este momento.

No puedo entender por qué el servidor funciona mal.

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.

¿Ves por qué ocurre el problema a partir de estos datos? ¿Cómo puedo avanzar más para acercarme a la fuente del error?

Reemplacé mi dirección IP real con 123.45.67.890

---- 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
--------

Detalles sobre el servicio.

Este es un servicio de informes meteorológicos. Está escrito en Perl, respaldado por MySQL. El script utiliza varios módulos (de CPAN y el nuestro).

El código es relativamente simple. El script descarga el clima de otro servidor, convierte el formato de datos y devuelve una respuesta XML. El clima se almacena en caché en MyISAM DB. Existe una base de datos de ubicaciones mundiales (INNODB) que también se puede solicitar mediante el script.

Estas son las métricas tomadas durante el período de alta carga.

Tráfico medio: 2,5 MBit/seg.

Número promedio de paquetes: 3300 paquetes/seg.

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 el informe del estado del servidor en el momento de alta carga. http://repkin5.snow.prohosting.com/server-status.htm Solo quedan 10 servidores secundarios de 120, por lo que hay suficiente espacio para nuevas solicitudes.

Instantánea superior del programa durante el período de alta carga.

------
top - 13:21:29 up 15 days, 18:36,  1 user,  load average: 0.18, 0.19, 0.21
Tasks: 137 total,   1 running, 136 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.8%us,  1.2%sy,  0.0%ni, 92.8%id,  0.7%wa,  0.0%hi,  3.5%si,  0.0%st
Mem:   1033904k total,   590620k used,   443284k free,     6892k buffers
Swap:  3028212k total,    82556k used,  2945656k free,    64156k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4252 mysql     20   0  162m  48m 3352 S    1  4.8 279:01.27 mysqld
14503 www-data  20   0 43280  14m 3824 S    1  1.4   0:00.16 apache2
14577 www-data  20   0 43012  13m 3500 S    1  1.4   0:00.06 apache2
14401 www-data  20   0 45076  17m 4340 S    0  1.8   0:00.46 apache2
14414 www-data  20   0 45516  18m 4344 S    0  1.8   0:00.47 apache2
14420 www-data  20   0 45624  18m 4372 S    0  1.8   0:00.61 apache2
14421 www-data  20   0 45488  18m 4352 S    0  1.8   0:00.42 apache2
14496 www-data  20   0 44820  17m 4328 S    0  1.7   0:00.18 apache2
14510 www-data  20   0 45216  17m 4300 S    0  1.8   0:00.62 apache2
    1 root      20   0  2844  456  404 S    0  0.0   0:05.24 init
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.24 migration/0
    4 root      15  -5     0    0    0 S    0  0.0  32:28.85 ksoftirqd/0
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.77 watchdog/0
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.15 migration/1
    7 root      15  -5     0    0    0 S    0  0.0   0:03.07 ksoftirqd/1
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.63 watchdog/1
-----

Respuesta1

Su servidor MySQL parece estar trabajando duro a veces (pero no en su captura de pantalla), debido al alto tiempo de CPU. Compruebe qué consultas se ejecutan emitiéndolas SHOW PROCCESSLIST;en el indicador de MySQL.

Intenta también activar elel estado del servidorpágina en apache. Con ExtendedStatus Onél te dará información sobre qué páginas se están cargando en ese momento y podrás ver cuántos "espacios" abiertos te quedan en Apache.

El valor predeterminado en Apache mpm-prefork es tener alrededor de 250 procesos como máximo, lo que significa que puede manejar 250 descargas de archivos simultáneas. Esto puede causar muchos problemas si tienes muchos visitantes, especialmente si lo tienes KeepAliveactivado. Verá en la página de estado de su servidor si este es su problema.

Respuesta2

Hay una gran cantidad de razones por las que Apache podría no responder. Como punto de partida, miraría el estado del servidor suponiendo que tengaestado_modhabilitado y ver cuántos procesos se están ejecutando y si parecen ocupados o no.Esta páginaes un buen primer lugar para revisar cosas que podrías probar si resulta que tienes problemas con el proceso secundario.

Respuesta3

¡La captura de pantalla superior muestra que su servidor MySQL no está funcionando en absoluto! (Lo siento, Emil, pero debes leerlo con más atención o aprender más sobre top).

Y solo se enumeran 8 procesos de Apache.

Y el promedio de carga es 0,2 con un 93% de CPU inactiva: esta máquina no hace nada.

Falta la mitad de la configuración en el enlace publicado, pero parece que ya está bifurcada.

Mi primera suposición es que MaxServers está configurado en algún valor extraño como 10 (dependiendo de cómo se vea su aplicación, debería estar en la región de 100-200).

También es posible que desees comprobar si hay cosas estúpidas como búsquedas inversas en conexiones entrantes o mod_ident instalado (OK, estos no sonsiempreestúpido, pero debe usarse con extrema precaución).

Ciertamente, instalar mod_status y habilitar el estado extendido dará una idea mucho mejor de lo que está sucediendo aquí.

C.

Respuesta4

¿Puedes intentar hacer ping por inundación (ping -f) en el servidor? Supongo que hay algún problema de hardware relacionado con la conexión de red, ya que su servidor no parece responder a los paquetes SYN lo suficientemente rápido.

información relacionada