Para fazer alguns testes de carga, por minha própria curiosidade, no meu servidor, executei:
ab -kc 50 -t 200 http://localhost/index.php
Isso abre 50 conexões keep-alive por 200 segundos e apenas bate meu servidor com pedidos de index.php
Nos meus resultados, recebo:
Concurrency Level: 50
Time taken for tests: 200.007 seconds
Complete requests: 33106
Failed requests: 32951
(Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors: 0
Keep-Alive requests: 0
Total transferred: 1948268960 bytes
HTML transferred: 1938001392 bytes
Requests per second: 165.52 [#/sec] (mean)
Time per request: 302.071 [ms] (mean)
Time per request: 6.041 [ms] (mean, across all concurrent requests)
Transfer rate: 9512.69 [Kbytes/sec] received
Observe as solicitações "com falha" do 32951. Eu não consigo descobrir isso.
Enquanto o teste estava sendo executado, consegui acessar perfeitamente meu site no meu computador em casa, embora o tempo de carregamento da página na parte inferior da página tenha sido relatado como 0,5 em vez do 0,02 habitual. No entanto, nunca tive uma solicitação falhada.
Então, por que a AB está relatando que metade das conexões falha? E o que significa "Length:" nesse contexto?
benchmarking
load-testing
apachebench
Benjamin
fonte
fonte
Respostas:
Deixa pra lá. A "falha de comprimento" indica apenas que cerca da metade do tempo da duração da resposta foi diferente.
Como o conteúdo é dinâmico, é provavelmente o identificador da sessão ou algo assim.
fonte
Para descrever o problema em outras palavras:
A ferramenta de benchmark do apache (ab) assume que a duração do conteúdo da resposta será a mesma durante todo o teste. Ele armazena o tamanho do conteúdo da primeira resposta. Se alguma das respostas adicionais tiver comprimento de conteúdo diferente, elas resultarão em "falhas de comprimento".
O seguinte relatório de bug do apache parece confirmar que: ASF Bug 42040
Resumo : se você estiver exibindo algum conteúdo de tamanho variável, provavelmente deverá ignorar esse tipo de falha na solicitação de ab.
Edit : Eu notei recentemente que o
ab
comando tem uma nova opção (pelo menos para mim):Eu posso vê-lo na versão 2.3 <$ Revisão: 1528965 $>, mas não na versão 2.3 <$ Revisão: 655654 $> , por isso provavelmente foi adicionado recentemente.
fonte
Desculpe ressuscitar uma pergunta antiga, mas foi a primeira que apareceu no Google. Às vezes, o erro de comprimento relatado por ab pode ter sido causado por um problema real: se a conexão estiver fechada no servidor antes que a quantidade total de bytes declarados no cabeçalho Content-Length não tenha sido recebida pelo cliente. Isso pode acontecer se houver outras partes entre o cliente e o servidor, por exemplo, balanceadores de carga artesanais ingênuos (meu caso).
fonte