Não importa se é usado nginx, apache, Lighttpd ou não, qualquer administrador de rede que tenha um servidor web irá, em algum momento, querer saber com que rapidez o servidor web responde a um determinado número de consultas.
Referência do Apache + GNUPlot
Desta vez, usaremos uma ferramenta chamada Referência Apache, que embora tenha 'apache' em seu nome, NÃO serve apenas para medir o desempenho do Apache, mas também pode ser usado para Nginx e outros. Na verdade, vou usá-lo para medir o desempenho de nginx.
Também vamos usar GNUPlote, o que nos ajudará a fazer gráficos como estes com algumas linhas:
Instalando Apache Benchmark e GNUPlot
Apache Benchmark é uma ferramenta que podemos usar depois de instalar o pacote Apache, GNUPlot estará disponível após instalar o pacote de mesmo nome. Então ...
Em distros como Debian, Ubuntu ou similar:
sudo apt-get install apache2 gnuplot
Em distros como ArchLinux ou derivados:
sudo pacman -S apache gnuplot
Precisamos apenas instalar o pacote Apache, não precisamos iniciá-lo ou configurar mais nada, basta instalá-lo.
Usando o Apache Benchmark
O que faremos é enviar um determinado número de pedidos (100) em grupos de vários (de 20 a 20) para um site específico. Vamos salvar o resultado em um arquivo .csv (result.csv) e depois processá-lo com GNUPloit, a linha seria:
ab -g resultados.csv -n 100 -c 20 http://nuestro-sitio-web.com/
É muito importante colocar o / na URL final do site a ser medido.
Esta é a saída ou registro que me mostra quando testo um site na minha rede:
Este é o ApacheBench, Versão 2.3 <$ Revisão: 1638069 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licenciado para The Apache Software Foundation, http://www.apache.org/ Benchmarking gutl.jovenclub.cu (seja paciente) ..... pronto
Software do servidor: nginx Nome do host do servidor: gutl.jovenclub.cu Porta do servidor: 80Caminho do documento: /
Comprimento do documento: 206 bytes Nível de simultaneidade: 20 Tempo gasto para testes: 0.101 segundos Solicitações concluídas: 100 Solicitações com falha: 27 (Conexão: 0, Recebimento: 0, Comprimento: 27, Exceções: 0) Respostas não 2xx: 73 Total transferido: 1310933 bytes HTML transferido: 1288952 bytes
Solicitações por segundo: 993.24 [# / seg] (média)
Tempo por solicitação: 20.136 [ms] (média) Tempo por solicitação: 1.007 [ms] (média, em todas as solicitações simultâneas) Taxa de transferência: 12715.49 [Kbytes / s] Tempo de conexão recebido (ms) mínimo médio [+/- sd] mediana máx. Conectar: 0 1 0.2 1 1 Processamento: 1 17 24.8 4 86 Esperando: 1 15 21.5 4 76 Total: 1 18 24.8 5 87 Porcentagem das solicitações atendidas em um determinado tempo (ms) 50% 5 66% 6 75% 22 80% 41 90% 62 95% 80 98% 87 99% 87
100% 87 (solicitação mais longa)
Marquei a vermelho o que considero ser o mais importante, que tem sido mais ou menos:
Dados do servidor que estamos testando, bem como a URL em questão.
Número de solicitações por segundo.
Quantos milissegundos o servidor demorou para atender a solicitação mais demorada, ou seja, aquela que demorou mais para ser atendida.
Com essas informações eles podem ter uma ideia de quanto tempo o servidor levará para atender aquela quantidade de solicitações, eles podem então adicionar um sistema de cache melhor, desativar módulos que não usam, etc etc, executar novamente o teste e veja se o desempenho melhorou ou não.
Recomendo executar o teste 2 ou 3 vezes, para que você crie algo como uma margem, já que os resultados de dois testes consecutivos raramente são idênticos.
Outras opções ou parâmetros úteis do Apache Benchmark:
-k -H 'Aceitar-Codificação: gzip, deflate' : Com isso ab aceitará o cache e a compressão que o servidor configurou, então os tempos serão menores.
-f urls.txt : Portanto, em vez de apenas testar o índice do site, ele fará testes nos URLs que especificamos nesse arquivo.
Enfim ... dê uma olhada em homem ab para você ver.
Mostre o resultado em um gráfico:
Para colocar essa saída em uma imagem, ou seja, em um meio mais visual e que muitas vezes, é tudo que os gestores conseguem entender ... para isso usaremos como falei antes, GNUPlote
Na mesma pasta onde temos o arquivo results.csv (lembre-se, acabamos de gerar com o comando acima) vamos criar um arquivo chamado gnuplot.p:
nano plot.p
Nele vamos colocar o seguinte:
definir tamanho do terminal png 600 definir saída "results.png"definir título"100 solicitações de, 20 solicitações simultâneas "definir proporção de tamanho 0.6 definir grade e definir xlabel"petições"definir ylabel"tempo de resposta (ms)"enredo"results.csv"usando 9 sbezier suave com título de linhas"gutl.jovenclub.cu"
Eu marquei em vermelho o que você sempre deve verificar. Ou seja, de cima para baixo:
Nome do arquivo de imagem a ser gerado
Número de solicitações totais e simultâneas.
Nome do arquivo que acabamos de gerar.
Domínio em que trabalhamos.
Depois de colocar isso, salvamos e saímos (Ctrl + O e, em seguida, Ctrl + X), vamos executar o seguinte:
gnuplot plot.p
E pronto, isso vai gerar o gráfico com o nome desejado, o meu é:
O fim!
O Apache Benchmark tem muito mais opções, também há muitas combinações que podemos usar para tornar nosso teste de desempenho ainda mais completo.