Benchmarking Apache usando ab

4

Eu estava fazendo alguns testes de desempenho para o Apache usando ab. O Apache, no nosso caso, está funcionando apenas como uma carga de balanceamento de carga entre dois servidores Liferay.

Inicialmente, fiz o teste para 1000 solicitações com 100 solicitações simultâneas. Os testes correram bem.

Mas quando eu executo os testes para 500 usuários simultâneos com 1000 solicitações, os testes falharam.

$ ab -c 500 -n 1000 http://103.X.X.X/web/guest/statistics 
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,   

Benchmarking  (be patient)

Completed 100 requests
Completed 200 requests
Completed 300 requests

apr_socket_recv: Connection timed out (110)

Total of 386 requests completed

Pode ver a seguinte mensagem no Kernel.

May 13 14:21:15 www kernel: possible SYN flooding on port 80. Sending cookies.

Eu tentei aumentar o valor para os dois parâmetros a seguir, mas os testes ainda estavam falhando e o mesmo erro pode ser visto no arquivo de log do sistema.

# echo "1024" > /proc/sys/net/core/somaxconn 
# echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog 

Temos uma campanha chegando onde esperamos um grande número de acessos ao nosso servidor. Como os testes falharam, ficamos um pouco preocupados se nosso servidor conseguirá aceitar a carga. Esperamos cerca de 500-700 solicitações simultâneas para um único dia durante a campanha.

Por favor, sugira como melhorar o desempenho do nosso servidor para suportar a carga.

    
por Zama Ques 13.05.2013 / 11:19

1 resposta

2

para fins de benchamrking você deve desativar syn_cookies:

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

Mas reative-os se estiver pronto!

Se o servidor não puder receber a carga necessária para otimizar seu webapp, ajuste sua configuração, use algum tipo de armazenamento em cache ou use mais de um servidor liderado por um balanceador de carga. Eu não posso dizer mais detals porque depende muito da sua aplicação e da carga de trabalho que você espera. Talvez você devesse dar uma olhada em projetos como nginx ou verniz. Existe um banco de dados no seu back-end? Talvez isso possa ser um bootleneck também ...

    
por 13.05.2013 / 14:41