Por que um servidor web pode não responder?

Por que um servidor web pode não responder?

Hospedamos nosso serviço web em um servidor dedicado. Durante o período de alta carga, o servidor retorna um erro de tempo limite em vez de uma página com muita frequência. Temos cerca de 170.000 solicitações diárias. Porém, o servidor tem muita memória livre e a CPU não está carregada no momento.

Não consigo entender por que o servidor funciona mal.

Criei um perfil do caso do problema com o utilitário tcpdump. Estas são as sessões boas e ruins rastreadas pelo tcpdump. A solicitação é a mesma em ambos os experimentos. Bom - o servidor retorna resposta. Ruim - sem resposta, erro de tempo limite.

Você vê por que o problema acontece a partir desses dados? Como posso avançar para me aproximar da origem do erro?

Substituí meu endereço IP real por 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
--------

Detalhes sobre o serviço.

Este é um serviço de previsão do tempo. Está escrito em Perl, apoiado por MySQL. O script utiliza vários módulos (do CPAN e dos nossos).

O código é relativamente simples. O script baixa a previsão do tempo de outro servidor, converte o formato dos dados e retorna uma resposta XML. O clima é armazenado em cache no MyISAM DB. Existe um banco de dados de localizações mundiais (INNODB) que também pode ser solicitado através do script.

Estas são as métricas obtidas durante o período de alta carga.

Tráfego médio: 2,5 MBit/seg

Número médio de pacotes: 3300 pacotes/seg

Hoster: SuperbHosting

SO: Ubuntu

Parâmetros do servidor: E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ

Este é um link para o arquivo de configuração do Apache que usamos http://repkin5.snow.prohosting.com/apache.txt

Este é o relatório de status do servidor no momento de alta carga http://repkin5.snow.prohosting.com/server-status.htm Existem apenas 10 Servidores Filhos em execução em 120, portanto há espaço suficiente para novas solicitações.

Instantâneo do programa principal durante o 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
-----

Responder1

Seu servidor MySQL parece estar funcionando muito às vezes (mas não na sua captura de tela), devido ao alto tempo de CPU. Verifique quais consultas são executadas emitindo SHOW PROCCESSLIST;no prompt do MySQL.

Tente também ativar ostatus do servidorpágina no Apache. Com ExtendedStatus Onele você terá informações sobre quais páginas estão carregando naquele momento e você poderá ver quantos "slots" abertos você ainda tem no Apache.

O padrão no Apache mpm-prefork é ter no máximo cerca de 250 processos, o que significa que você pode lidar com 250 downloads simultâneos de arquivos. Isso pode causar muitos problemas se você tiver muitos visitantes, especialmente se estiver KeepAliveativado. Você verá na página de status do servidor se esse é o seu problema.

Responder2

Há uma série de razões pelas quais o Apache pode não responder. Como ponto de partida, eu examinaria o status do servidor, supondo que você tenhamod_statusativado e veja quantos processos estão em execução e se parecem ocupados ou não.Esta páginaé um bom primeiro lugar para examinar coisas que você pode tentar se descobrir que tem problemas no processo filho.

Responder3

A captura de tela superior mostra que seu servidor MySQL não está funcionando muito! (Desculpe, Emil - mas você precisa ler isso com mais atenção ou aprender um pouco mais sobre o top).

E há apenas 8 processos Apache listados.

E a média de carga é de 0,2 com 93% de CPU ociosa - esta máquina está parada sem fazer nada.

Metade da configuração está faltando no link postado, mas parece que está pré-bifurcado.

Meu primeiro palpite é que MaxServers está definido com algum valor estranho como 10 (dependendo da aparência do seu aplicativo, deve estar na região de 100-200).

Você também pode querer verificar se há coisas estúpidas, como pesquisas reversas em conexões de entrada ou mod_ident instalado (OK, estes não sãosempreestúpido - mas deve ser usado com extremo cuidado).

Certamente instalar o mod_status e ativar o status estendido dará uma imagem muito melhor do que está acontecendo aqui.

C.

Responder4

Você pode tentar inundar o ping (ping -f) no servidor? Eu acho que há algum problema de hardware relacionado à conexão de rede, pois seu servidor não parece responder aos pacotes SYN com rapidez suficiente.

informação relacionada