Servidor apache não responsivo

1

Hospedamos nosso serviço da 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.

No entanto, 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.

Eu analisei o caso do problema com o utilitário tcpdump. Estas são as boas e más sessões rastreadas pelo tcpdump. O pedido é o mesmo em ambos os experimentos.

Good - server returns response.

Bad - no response, time-out error.

Você vê por que o problema acontece com esses dados? Como posso avançar para me aproximar da fonte do erro?

Eu 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 relatórios meteorológicos. Está escrito em Perl, apoiado pelo MySQL. O script usa vários módulos (do CPAN e do nosso).

O código é relativamente simples. O script faz o download do clima de outro servidor, converte o formato de dados e retorna a resposta XML. O clima é armazenado em cache no MyISAM DB. Existe uma base de dados de localizações mundiais (INNODB) que também pode ser solicitada através do script.

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

Tráfego médio: 3 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 link

Este é o relatório de status do servidor feito logo após o erro de tempo limite. link Há apenas 10 Servidores Child executando de 120, portanto, espaço suficiente para novas solicitações.

Instantâneo do programa superior 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
-----
    
por par 18.01.2010 / 11:47

3 respostas

1

Nós temos um comportamento estranho em algum momento com um servidor que é muito legal (o "tempo de atividade" dirá a você), mas se torna muito irresponsável. Uma maneira de verificar é usar o "netstat", ver quantas linhas você tem. Você pode tentar o mod_status do Apache também. Nosso problema ainda não é muito claro, mas certamente vem do mundo externo, ou seja, da conectividade do datacenter. Uma máquina perto de você pode estar comendo toda a largura de banda, ou até mesmo filtrando os pacotes antes que eles cheguem até você, assim a lentidão percebida.

Não tenho certeza se isso se aplica a você, mas aparentemente você não tem uma carga alta em CPUs enquanto muitos processos do apache esperando por algo, talvez eles esperem por respostas de fora ... Se você tiver "sar" isso pode ajudar também.

    
por 18.01.2010 / 17:07
1

O que não foi descrito é o que este serviço da web é realmente projetado / escrito para fazer . Muitas vezes, o código do aplicativo em execução em encadeamentos simultâneos pode formar algum nível de contenção para recursos comuns ou aguardar algum recurso de backend que seja gargalo. Portanto, mesmo que a utilização da memória ou do processador não seja alta, a limitação desses outros recursos comuns pode atrasar ou atrasar o processamento, ou seja, a resposta em tempo hábil de outros threads.

Qual plataforma de aplicativos está instalada no Apache para realizar o trabalho? bem como o ponto de recurso mais final necessário para atender à solicitação de serviço da web? Se um banco de dados de back-end estiver envolvido, um deadlock de consulta é provável no servidor de banco de dados.

    
por 19.01.2010 / 11:31
0

Existem duas seções em seu arquivo /etc/apache2/apache.conf em mpm_prefork_module e em mpm_worker_module

StartServers          5  
MinSpareServers       5  
MaxSpareServers      10  
MaxClients          150    
MaxRequestsPerChild   0  

Você pode precisar ajustar essas seções de acordo com o seu ambiente para lidar com mais solicitações.

    
por 18.01.2010 / 15:38