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
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/
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: 80 Caminho 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.
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 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.
Mas ei, isso tem sido o básico 😉
Divirta-se!
Benchmark interessante do apache, eu não sabia sobre o gnuplot, é possível modificar o estilo da saída? Digo como para um relatório formal.
Saudações do Chile.
Sim, tem muitas configurações na net para gnuplot, pesquise no Google para ver se acha alguma séria ou profissional o suficiente para você usar, porque é do gosto de todos 🙂
Hummm vou testar agora mesmo em um servidor apache virtual que estou rodando para ver como vai, com relação ao GUTL, já que dispara muito rápido a partir de 80 requisições, certo? Vamos ver que 100 ms não. nada, mas a alta que dá por 10 pedidos a mais em comparação com 70 a 80 com 80 a 90 chama minha atenção
Deve ser devido à fila ou ao número máximo de threads a serem atendidos simultaneamente. Porém, eu fiz o teste sem gzip, sem deflate, sem cache nem nada 😉
Muito interessante, principalmente para o uso do GNUPlot. Pelo que vejo, pode ser usado para gerar gráficos de quase qualquer conjunto de dados, certo? ...
Sim, claro, você passa os dados em um arquivo separado por vírgulas ou algo parecido, você diz como processá-lo no arquivo de configuração, e voila
Olá, sempre passo meu tempo lendo este blog, mas nunca comentei nenhum artigo, e essa me parece uma boa oportunidade.
O que quero compartilhar com você é que esse tipo de gráfico pode ser mal interpretado, porque o Apache Bench classifica o resultado usando ttime (tempo total) em vez de tempo sequencial. Embora os dados ainda sejam verdadeiros, o gráfico provavelmente não mostra o que queremos.
Aqui está o link onde li.
http://www.bradlanders.com/2013/04/15/apache-bench-and-gnuplot-youre-probably-doing-it-wrong/
Saudações.
Apache Benchmark não é a melhor ferramenta para medir o desempenho de servidores HTTP em computadores com vários núcleos, além disso, apenas 100 solicitações com 20 conexões simultâneas é um teste muito fraco, algo mais realista seria 1,000 ou 10,000 solicitações com 100 conexões simultâneas ( sabe-se que o Nginx é um dos aplicativos capazes de atender a mais de 10,000 pedidos por segundo) e para isso é melhor usar uma ferramenta como o weighttp, que é projetado para computadores multi-core e usa epoll que é mais rápido, ao contrário do Apache Banco que usa um único thread e um mecanismo de manipulação de eventos menos eficiente.
Para chegar ao meu ponto, supondo que o servidor tenha apenas 4 núcleos:
weighttp -n 10000 -c 100 -t 4 -k "http://our-web-site.com/"
Olá a todos,
Ao desenhar o gráfico (do CSV) com gnuplot, ocorre o seguinte erro, você pode me dizer como resolvê-lo?
"Plot.p", linha 8: aviso: pulando arquivo de dados sem pontos válidos
plotar «graph.csv» usando 9 sbezier suave com título de linhas «AB - localhost / web»
^
"Plot.p", linha 8: intervalo x é inválido
Com o gnuplot, também posso gerar páginas HTML?