Como saber se meu nginx está com boa saúde?

1

Estou executando um nginx no EC2 (m1.small) para a finalização SSL.

Estou usando 2 funcionários no Ubuntu, com o nginx mais recente (estável), a taxa de transferência da rede está em torno de 2Mbps e a média de carga do sistema está em torno de 2 a 3.

Eu estou querendo saber se esse sistema está de boa saúde por enquanto,

por exemplo.

  1. qual é o tamanho da fila (eu sei que o nginx pode lidar com muitas solicitações simultâneas, mas quero dizer, antes que a solicitação seja exibida, quantas delas precisam aguardar antes de serem atendidas)
  2. qual é o tempo médio da fila para que uma determinada solicitação seja exibida.

Eu quero saber porque, se meu nginx for cpu bounded (por exemplo, devido ao SSL), precisarei fazer upgrade para uma instância mais rápida.

Meu status atual do nginx

Active connections: 4076 
server accepts handled requests
 90664283 90664283 104117012 
Reading: 525 Writing: 81 Waiting: 3470 
    
por Howard 20.11.2012 / 16:50

6 respostas

1

Configure o plug-in nginx status e instale collectd para coletar dados de desempenho do sistema. É um daemon muito leve em termos de recursos do sistema que precisa. Há um plugin para monitoramento de nginx: Plugin: nginx e, é claro, collectd pode monitorar outros dados de desempenho do sistema .

Na medida em que collectd é apenas um coletor de dados de desempenho (armazena em DBs RRD), é necessária uma ferramenta para exibir dados. Estou muito confortável com CGP ... git version is OK. CGP é um aplicativo PHP, portanto ele irá consumi-lo apenas quando você olhar os gráficos.

Exemplo de gráfico: Nginx_connections_and_requests.png

Btw O Amazon EC sempre foi significativamente mais lento do que outros e, principalmente, para armazenamento. Isso poderia ser raiz de maior carga.

    
por 24.11.2012 / 13:11
1

Para verificar processos pesados de I / O, tente instalar iotop :

apt-get install iotop

Requer suporte a contabilidade de e / s dentro do kernel, que está presente no Ubuntu 10.04 ou superior.

Se você descobrir que o nginx é limitado por E / S, tente examinar se você realmente precisa de log de acesso (que pode ser um gargalo em um número tão alto de solicitações). Desativar o log de acesso é tão fácil quanto:

access_log /dev/null crit;

FYI

access_log off;

não serve (o nginx escreve em um arquivo com o nome desativado).

Se precisar de registro, implemente uma política de envio (como logrotate os logs uma vez por dia e envie o roteado para um local remoto via rsync, scp ou outro) e tente gravar na instância armazenar (por padrão montado em / mnt). O armazenamento de instâncias é respaldado pelos discos locais do servidor, que podem ser mais rápidos (embora isso não seja garantido), mas seus dados são perdidos no desligamento da instância, daí a necessidade de uma diretiva de envio de logs.

    
por 24.11.2012 / 13:41
0

How to know if my nginx is in good health?

Verifique as métricas do sistema para ver se você está atingindo um gargalo de desempenho e, em caso afirmativo; identificar onde está.

2mbps é definitivamente lento para um m1.small. Eu obtive significativamente mais que isso de minhas instâncias t1.micro. Verifique o iotop e o htop para ver o que seu sistema está fazendo. Parece que há um gargalo desagradável no seu processo em algum lugar. As métricas do CloudWatch para esta instância e seus volumes também podem ajudar.

Se você estiver executando páginas dinâmicas (PHP, Perl, Ruby), pode haver algum código não otimizado que esteja causando a lentidão.

Se você não estiver vendo gargalos de CPU ou de E / S no host, o problema pode estar em outra camada se você tiver outros sistemas na pilha.

Uma coisa a considerar é usar um ELB para a terminação SSL (e balanceamento de carga também) para distribuir a carga. Eles não são extremamente caros e podem descarregar o suficiente (assumindo que o SSL é o culpado) para ajudar o desempenho a ser mais barato do que subir no tamanho da instância. Pendurar seu site fora do ELB também lhe daria mais flexibilidade sobre como dimensionar e gerenciar o site.

    
por 26.11.2012 / 15:33
0

Como você está usando ec2 small, que tem apenas 1 unidade de computação, um loadavg de 2 ~ 3 é muito alto. As métricas do sistema fornecerão muito mais informações úteis do que aquelas fornecidas pelo nginx. Em vez disso, essas métricas realmente não ajudam em nada ...

Você também pode se beneficiar lendo outras perguntas relacionadas às médias de carga em geral para entender melhor seus significados e importância.

link

    
por 27.11.2012 / 13:56
0

Não respondendo realmente a pergunta, mas ...

O problema com as instâncias pequenas do EC2 é que você não tem 100% de tempo de CPU disponível, apenas bursts. Depois que sua instância começar a manter a CPU ocupada de forma consistente, ela será acelerada.

Idealmente, você não deve estar carregando cargas > 2.0. Como as instâncias pequenas têm apenas uma CPU, qualquer carga acima de 1,0 significa que você já tem metade de seus processos aguardando fatias da CPU disponíveis. Uma instância média deve ser suficiente.

Um bom artigo explicando como medir a carga do sistema: link

    
por 27.11.2012 / 21:31
0

Se o seu top mostrar que o nginx é o único processador que está consumindo CPU e o seu tipo de instância é m1.small, isso com certeza significa que o nginx está em estado BAD. Certifique-se de desativar a compactação gzip e também sugerir para adicionar o patch SPDA link (o firefox e o chrome suportam SPDY) que aumentará muito o tempo de carregamento das páginas SSL.

    
por 29.11.2012 / 17:17