Apache Benchmark + GNUPlot: Meça e represente graficamente o desempenho do seu servidor web

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.

Gerenciamento de servidor de serviços gerenciados-e1368625038693

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:

resultados

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: 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:

  1. Dados do servidor que estamos testando, bem como a URL em questão.
  2. Número de solicitações por segundo.
  3. 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:

  1. Nome do arquivo de imagem a ser gerado
  2. Número de solicitações totais e simultâneas.
  3. Nome do arquivo que acabamos de gerar.
  4. 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 é:

resultados2

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.

Mas ei, isso tem sido o básico 😉

Divirta-se!


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Francisco dito

    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.

    1.    KZKG ^ Gaara dito

      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 🙂

  2.   Wolf119 dito

    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

    1.    KZKG ^ Gaara dito

      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 😉

  3.   Charlie Brown dito

    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? ...

    1.    KZKG ^ Gaara dito

      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

  4.   Adolfo dito

    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.

  5.   Hugo dito

    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/"

  6.   dito

    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?