você está aqui: Home  → Arquivo de Mensagens

httping - um "ping", só que para http!

Colaboração: Cesar Brod

Data de Publicação: 28 de março de 2013

O ping é um utilitário pequeno e útil para testar a existência de uma conexão entre máquinas, reportando dados sobre o tempo de ida e volta dos pacotes de dados e indicando se os mesmos estão se perdendo pelo caminho. Abaixo, um exemplo de ping entre a minha máquina e o servidor do Dicas-L:

$ ping www.dicas-l.com.br
PING www.dicas-l.com.br (173.212.215.234) 56(84) bytes of data.
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=1 ttl=42 time=186 ms
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=2 ttl=42 time=192 ms
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=3 ttl=42 time=186 ms
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=4 ttl=42 time=186 ms
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=5 ttl=42 time=273 ms
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=8 ttl=42 time=193 ms
64 bytes from www.dicas-l.com.br (173.212.215.234): icmp_req=9 ttl=42 time=193 ms
^C
—- www.dicas-l.com.br ping statistics ---
9 packets transmitted, 7 received, 22% packet loss, time 8021ms
rtt min/avg/max/mdev = 186.261/201.754/273.533/29.463 ms

O comando é terminado pressionando-se, simultaneamente, as teclas Ctrl e C, quando ele, então, gera as estatísticas finais. Notem que nove pacotes foram transmitidos, mas apenas sete chegaram a seu destino (perda de 22%). O tempo de viagem de cada pacote oscilou entre 186 e 273 milissegundos. Você tem mais informações sobre o comando ping em sua página de manual:

 man ping

O ping está presente (até onde eu sei!) em todos os sistemas operacionais derivados do Unix (como o Linux, *BSD, MacOS, Android) e até no Windows. O httping precisa ser instalado. Para quem é usuário de distribuições baseadas no Debian (Linux Mint, Ubuntu e outras), o processo é simples:

 sudo apt-get install httping

No FreeBSD também é fácil:

$ cd /usr/ports/net/httping
$ make install

No Android, é só procurar pelo aplicativo no Google Play. Os usuários de outros sistemas devem acessar a página do projeto e verificar como fazer a sua instalação. Aos usuários de Windows é bem simples, é só trocar de sistema operacional primeiro.

$ httping http://www.dicas-l.com.br
PING www.dicas-l.com.br:80 (http://www.dicas-l.com.br):
connected to www.dicas-l.com.br:80, seq=0 time=549.09 ms 
connected to www.dicas-l.com.br:80, seq=1 time=547.69 ms 
connected to www.dicas-l.com.br:80, seq=2 time=614.83 ms 
connected to www.dicas-l.com.br:80, seq=3 time=560.66 ms 
connected to www.dicas-l.com.br:80, seq=4 time=616.99 ms 
^C--- http://www.dicas-l.com.br ping statistics ---
5 connects, 5 ok, 0.00% failed
round-trip min/avg/max = 547.7/577.9/617.0 ms

Para terminar e obter as estatísticas, como no ping, é só clicar Ctrl e C simultaneamente. Veja que, no caso do servidor do Dicas-L, o tempo de viagem de um pacote http oscilou entre 547 e 617 milissegundos.

Mas isso serve para o quê mesmo? No meu caso, basicamente para a depuração de servidores http. Ao contrário do ping, que trata de uma resposta pura e simples de rede, para que um pedido http seja processado, o servidor http tem que fazer o seu trabalho. Como a resposta do comando é muito simples, por exemplo, eu posso fazer pequenas modificações em arquivos de configuração como o apache2.conf e ver como isso afeta, imediatamente, os tempos de resposta de meu servidor web. Aos que servem também aplicações na [melhor linguagem do mundo http:php.net], alterações no arquivo ``php.ini também podem afetar os resultados do httping e, por consequência, o desempenho do servidor web.

Outro uso é comparar os resultados obtidos em serviços de hospedagem web (claro, isso serve para ter algumas métricas, mas não é totalmente conclusivo por si só). Mas peguemos um exemplo bem controlado. Tenho o domínio da BrodTec hospedado através de um serviço da Locaweb e estou considerando contratar um novo serviço, em ambiente de Cloud, da mesma empresa. Como já tenho o serviço de Cloud contratado para outros servidores que administro, usando exatamente a mesma estrutura do site de minha empresa (Linux, apache, php, drupal), posso fazer o teste:

$ httping http://brodtec.com
PING brodtec.com:80 (http://brodtec.com):
connected to brodtec.com:80, seq=0 time=2969.01 ms 
connected to brodtec.com:80, seq=1 time=4074.59 ms 
connected to brodtec.com:80, seq=2 time=3251.73 ms 
connected to brodtec.com:80, seq=3 time=2623.24 ms 
connected to brodtec.com:80, seq=4 time=3042.32 ms 
connected to brodtec.com:80, seq=5 time=2296.77 ms 
^C--- http://brodtec.com ping statistics ---
6 connects, 6 ok, 0.00% failed
round-trip min/avg/max = 2296.8/3042.9/4074.6 ms

A primeira coisa que já noto, é que o tempo de resposta de meu servidor já é bem maior do que o do Dicas-L. Isto não me assusta tanto, já que o Dicas-L é um portal de muito acesso e, portanto, tem que estar mesmo em um servidor melhor e mais rápido. Mas agora, fazendo o teste em um domínio que tenho no Cloud, estrutura que penso em contratar para o portal de nossa empresa:

$ httping http://mundolinux.com.br
PING mundolinux.com.br:80 (http://mundolinux.com.br):
connected to mundolinux.com.br:80, seq=0 time=791.65 ms 
connected to mundolinux.com.br:80, seq=1 time=769.36 ms 
connected to mundolinux.com.br:80, seq=2 time=1168.69 ms 
connected to mundolinux.com.br:80, seq=3 time=977.80 ms 
connected to mundolinux.com.br:80, seq=4 time=1076.32 ms 
connected to mundolinux.com.br:80, seq=5 time=979.75 ms 
^C--- http://mundolinux.com.br ping statistics ---
6 connects, 6 ok, 0.00% failed
round-trip min/avg/max = 769.4/960.6/1168.7 ms

O tempo médio de acesso caiu em um terço, comparado com a estrutura de hospedagem de nosso site atual.

Outra coisa que gosto de fazer é eliminar qualquer interferência de rede quando estou testando o desempenho (e fazendo ajustes para a sua melhora) de meus servidores web. Para isso, rodo o httping na própria máquina onde tenho meu servidor web e uso httping localhost. Também costumo editar o arquivo /etc/hosts para que não seja feita uma busca DNS para os servidores web hospedados na própria máquina.

O comando man httping, assim como a página do projeto lhe darão mais informações de uso do mesmo.

O httping é um dos comandos que Cesar Brod leva em sua manga quando ministra oficinas de desempenho em servidores web com o Drupal.


Veja a relação completa dos artigos de Cesar Brod