Pergunta

Eu estou tentando descobrir como usar ApacheBench e referência o meu site. Eu instalei o projeto padrão do site (é ASP.NET MVC, mas por favor, não colocar a leitura parada se o retorno estiver não uma pessoa NET).

Eu não mudei nada. Adicionar novo projeto. Set confuration para liberar. Executar sem depuração. (Por isso é no modo ao vivo). Sim, isso é com o construído em servidor web, e não o grau de produção IIS ou Apache ou o que quer.

Então aqui está o resultado: -

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        ASP.NET
Server Hostname:        localhost
Server Port:            50035

Document Path:          /
Document Length:        1204 bytes

Concurrency Level:      1
Time taken for tests:   2.371 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      1504000 bytes
HTML transferred:       1204000 bytes
Requests per second:    421.73 [#/sec] (mean)
Time per request:       2.371 [ms] (mean)
Time per request:       2.371 [ms] (mean, across all concurrent requests)
Transfer rate:          619.41 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.1      0      16
Processing:     0    2   5.5      0      16
Waiting:        0    2   5.1      0      16
Total:          0    2   5.6      0      16

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%     16
  95%     16
  98%     16
  99%     16
 100%     16 (longest request)

C:\Temp>

Agora, eu não sei exatamente o que eu deveria estar olhando.

Em primeiro lugar, eu depois que o número de pedidos de um segundo. Então, se temos um requisito para lidar com 300 reqs / seg, então é isso dizendo que lida com uma média de 421 das req um segundo?

Em segundo lugar, qual é a razão para a adição de mais concorrentes? Como, se eu tiver de 1000 visitas em 1 concorrente, como é que diferem de 500 em 2 concorrente? Será que é para testar se há qualquer código que bloqueia outras solicitações?

Por fim, há algo importante que eu perdi a partir dos resultados que eu deveria tomar nota de?

Obrigado:)

Foi útil?

Solução

qual é a razão para adicionar mais concorrente? Como, se eu tiver 1000 acessos em 1 de concorrente, como é que isso diferem a 500 em 2 de concorrente? É para teste se há algum código que outros blocos pedidos?

É um pouco sobre isso, sim:. A sua aplicação é, provavelmente, fazer as coisas onde a concorrência pode trazer problemas

Um par de exemplos:

  • uma página está tentando acessar um arquivo - trancando-a no processo; isso significa que se uma outra página tem que acessar o mesmo arquivo, ele vai ter que esperar até a primeira página tem trabalho acabado com ele.
  • exatamente o mesmo para acessar banco de dados: se uma página está escrevendo para um banco de dados, há algum tipo de MECANISMOS bloqueio (seja baseado em tabelas, ou baseados em linha, ou qualquer outra coisa, dependendo de suas DBMS)

Os testes com uma concorrência de um é OK ... Contanto que seu site nunca vai ter mais de um usuário ao mesmo tempo; que é bastante não realista, eu espero por você.


Você tem que pensar sobre quantos usuários estarão no local, ao mesmo tempo, quando ele está em produção - e ajustar a concorrência; basta lembrar que 5 usuários, ao mesmo tempo em seu site não significa que você tem que testar com uma simultaneidade de 5 com ab:

  • usuários reais irá esperar um par de segundos entre cada pedido (tempo para ler a página, clique em um link, ...)
  • ab não espera em tudo: cada vez que uma página é carregada (ou seja, um pedido é terminado), lança outro pedido


Além disso, duas outras coisas:

  • ab só testa para uma página - usuários reais irá navegar em todo o site, o que poderia causar problemas de concorrência que você não teria ao testar apenas uma página
  • ab carrega apenas uma página: não solicitar recursos externos (acho CSS, imagens, JS, ...); que significa que você terá muitas outras solicitações, mesmo se não for realmente caro, quando o site está em produção.

Como nota: você pode querer dar uma olhada em outras ferramentas, o que pode fazer testes mais completos, como cerco , Jmeter , ou OpenSTA : ab é muito bom quando você quer medir se algo que você fez é otimizar sua página ou não; mas se você quiser simular o uso "real" do seu site, esses são muito mais adaptado.

Outras dicas

Sim, se você quer saber quantas solicitações por segundo seu site é capaz de servir, olhar para o "pedidos por segundo" linha. No seu caso é realmente muito simples, já que você correu ab com a concorrência de 1. Cada pedido, em média, levou apenas 2.371ms. 421 daqueles, um após o outro, tomar 1 segundo.

Você realmente deve jogar com a concorrência um pouco, para medir com precisão a capacidade do seu site. Até um certo grau de concorrência que você esperaria o rendimento a aumentar, como várias solicitações se tratado em paralelo pelo IIS. Por exemplo. se o servidor tem várias CPUs / núcleos. Além disso, se uma página baseia-se em IO externo (serviço de camada intermediária, ou DB chamadas) a CPU pode trabalhar em um pedido, enquanto outro está à espera de IO para ser concluído. Em um certos pedidos pontuais / seg se estabilize, com o aumento da concorrência, e você verá aumento de latência. Aumento de concorrência ainda mais e você verá a sua diminuição rendimento (req / seg), como o servidor tem de dedicar mais recursos para fazer malabarismos todas estas solicitações simultâneas.

Tudo o que disse, a maioria dos seus pedidos voltar em cerca de 2ms. Isso é muito danado rápido, então eu estou supondo que não há muito acontecendo em termos de DB ou chamadas camadas médias, e seu sistema é provavelmente estourou na CPU quando o teste está em execução (ou algo está errado, e não muito rápido. São Tem certeza ab recebe a página de resposta que você pretende que ele? Ou seja, é a página que você acha que você está testando 1.204 bytes grande?). Que traz um outro ponto: a própria ab consome cpu também, especialmente uma vez que a concorrência. Então você quer correr ab em outra máquina.

Além disso, deve o seu site fazer chamadas externas para serviços de camada intermediária ou bancos de dados, você quer ajustar a sua machine.config para optimizar o número de threads IIS aloca: http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

E apenas um pouco de trivia: o tempo necessário estatísticas é feito em incrementos de ~ 16 ms, uma vez que parece ser a granularidade do temporizador usado. Ou seja, 80% de suas respostas não tomaram 0ms, que levou algum tempo <16ms.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top