
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.
Good - server returns response.
Bad - no response, time-out error.
¿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: 3 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 un informe del estado del servidor tomado inmediatamente después de un error de tiempo de espera. 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
A veces tenemos un comportamiento extraño con un servidor que es muy bueno (el "tiempo de actividad" te lo dirá) pero se vuelve muy irresponsable. Una forma de comprobarlo es utilizar "netstat", ver cuántas líneas tiene. También puedes probar Apache mod_status. Nuestro problema todavía no está muy claro, pero ciertamente proviene del mundo exterior, es decir, de la conectividad del centro de datos. Una máquina cercana a usted podría estar consumiendo todo el ancho de banda, o incluso filtrando los paquetes antes de que lleguen a usted, de ahí la lentitud percibida.
No estoy seguro si se aplica a usted, pero aparentemente no tiene una carga alta en las CPU mientras muchos procesos de Apache esperan algo, tal vez esperan respuestas del exterior... Si tiene "sar", también puede ayudar.
Respuesta2
Lo que no se ha descrito es qué es realmente este servicio web.diseñado/escrito para hacer. A menudo, el código de la aplicación que se ejecuta en subprocesos simultáneos puede generar algún nivel de contención por recursos comunes o esperar algún recurso de backend que sea un cuello de botella. Por lo tanto, aunque la utilización de la memoria o del procesador puede no ser alta, la limitación de estos otros recursos comunes puede detener o retrasar el procesamiento y, por tanto, la respuesta oportuna, de otros subprocesos.
¿Qué plataforma de aplicaciones se encuentra encima de Apache para realizar el trabajo? ¿Así como el punto de recurso más extremo requerido para atender la solicitud de servicio web? Si se trata de una base de datos backend, es probable que se produzca un bloqueo de consultas en el servidor de la base de datos.
Respuesta3
Hay dos secciones en su archivo /etc/apache2/apache.conf en mpm_prefork_module y mpm_worker_module
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
Es posible que deba ajustar estas secciones según su entorno para manejar más solicitudes.