Testes de performance com ApacheBench

NetCoders
netcoders
Published in
4 min readJun 27, 2016
apachebench-00

Avaliar aspectos envolvendo questões de performance é uma tarefa de fundamental importância em sistemas Web. Os resultados destas verificações servirão de base para que melhorias sejam conduzidas dentro de um projeto, sempre buscando garantir a operação das aplicações em níveis aceitáveis diante de situações de uso mais intensivo.

O ApacheBench (ab) é uma solução gratuita que pode auxiliar na realização de testes de performance em aplicações Web. Um dos componentes do Apache HTTP Server, este utilitário de linha de comando pode ser empregado em cenários simulando múltiplos usuários concorrentes.

Para utilizar o ApacheBench no Windows será necessário, primeiramente, obter uma distribuição do servidor Apache para este sistema operacional. Nos testes descritos neste artigo foi utilizada a versão 2.4.20 do Apache Server, a qual foi baixada a partir do seguinte link:

OBSERVAÇÃO: embora faça parte dos binários que compõem o Apache Server, não será necessário proceder com a configuração de um servidor Web para uso do ApacheBench.

Na Imagem 1 é possível observar o utilitário ab.exe (ApacheBench) no diretório bin do Apache 2.4:

apachebench-01

Imagem 1. O utilitário ab.exe

Para os testes envolvendo o uso do ApacheBench será utilizada uma aplicação baseada na tecnologia ASP.NET MVC 5. Na Listagem 1 está a classe HomeController deste projeto, com a Action Contact modificada com o objetivo de forçar uma espera de 5 segundos durante o seu processamento:

[code language=”csharp” highlight=”11"]
using System.Web.Mvc;

namespace TesteApacheBench.Controllers
{
public class HomeController : Controller
{

public ActionResult Contact()
{
System.Threading.Thread.Sleep(5000);


}
}
}
[/code]

Listagem 1: Classe HomeController

Após iniciar a execução da aplicação de testes será necessário ativar o Prompt de Comando, acessando a partir deste último o diretório em que se encontra o ApacheBench. Digitar então a seguinte linha de comando (como indicado na Imagem 2):

ab -n 50 -c 5 http://localhost:57623/Home/Contact

apachebench-02

Imagem 2. Executando o ApacheBench via linha de comando

Quanto às configurações informadas para o utilitário ab.exe, foram utilizados os como parâmetros as opções -n (o número máximo de requisições; para este exemplo foram assumidas 50 solicitações) e -c (indica o número máximo de requisições concorrentes, no caso 5). Além disso, foi especificado como último parâmetro a URL a ser testada.

Na Imagem 3 está o resultado da execução do ApacheBench. Nota-se que o processamento de cada requisição levou em média 5 segundos, com um tempo total em torno de 50 segundos:

apachebench-03

Imagem 3. Resultado da execução do ApacheBench

O próximo passo agora será alterar a Action Contact (Listagem 2), de maneira a possibilitar o armazenamento de seu resultado em cache por 10 minutos (600 segundos):

[code language=”csharp” highlight=”9"]
using System.Web.Mvc;

namespace TesteApacheBench.Controllers
{
public class HomeController : Controller
{

[OutputCache(Duration = 600)]
public ActionResult Contact()
{
System.Threading.Thread.Sleep(5000);


}
}
}
[/code]

Listagem 2: Classe HomeController após modificações

Depois de uma nova execução do ApacheBench (Imagem 4) o tempo total de processamento será reduzido para aproximadamente 5,2 segundos:

apachebench-04

Imagem 4. Resultado do ApacheBench após nova execução

Caso busque maiores detalhes sobre as diversas opções de linha de comando do ApacheBench acesse:

O vídeo a seguir também aborda o uso do ApacheBench em testes de carga/stress, além de apresentar um utilitário equivalente a esta solução chamado Siege:

E por hoje é isso…

Até uma próxima oportunidade!

--

--