Como fazer um Benchmark de aplicações HTTP

Trabalho a 7 anos para um cliente com um banco de dados já bem ultrapassado, poucas pessoas conhecem ele, é o ZIM, e por ser bem antigo ele não possui nenhuma feature nativa para conexão com linguagens WEB, sendo assim, eu com mais um colega de trabalho que é desenvolvedor ZIM desenvolvemos conector PHP 2 ZIM para poder trabalhar, mas este conector trabalha com algumas limitações que ocasionalmente demandam um pouco mais de tempo de desenvolvimento, mas em momento nenhum impedem o desenvolvimento….

Tentando melhorar esta plataforma desenvolvi um “driver ODBC para ZIM” que tirou todas as limitações de comando no banco (ele não tirou a limitação de telas, mas nem é preciso, afinal de contas quem vai trabalhar com as telas é o HTML com PHP), ficou a coisa mais linda do mundo mas antes de sair implementando com esta nova ferramenta resolvi fazer um benchmark de um algoritmo rodando no sistema antigo e no sistema novo para ajudar na escolha de implementação.

Legal… mas como fazer um benchmark de aplicações HTTP?

Pesquisando encontrei três ferramentas:

  • httperf
    Ferramenta capas de fazer tudo a partir de simples requisições para simular clientes, disponível em: http://www.hpl.hp.com/personal/David_Mosberger/httperf.html
  • Apache Bench
    Ferramente simples de benchmarking, distribuida com o servidor web Apache.
  • Autobench
    É um script Perl script para automatizar uma série de testes no httperf em todo o servidor (um uma parte do servidor). Ele faz um “parse” na saída do httperf conseguindo exportas os dados para documentos CSV ou até mesmo gráficos. Disponível em: http://www.xenoclast.org/autobench/

A ferramenta chamada “ab” ou Apache HTTP server benchmarking tool, é uma simples e excelente ferramenta, consultando o manual(”man ab”) dá para incrementar o benchmark, mas basicamente dá para fazer assim:

ab -n [número de requisições] -c [número de conexões concorrentes] [http://site]

Exemplo:

[root@server ~]#  ab -n 100 -c 5 http://www.google.com.br/This is ApacheBench,
Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0

Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright (c) 1998-2002 The Apache Software Foundation,
http://www.apache.org/Benchmarking www.google.com.br (be patient)…..done

Server Software:        gws

Server Hostname:        www.google.com.br

Server Port:            80

Document Path:          /

Document Length:        2976 bytes

Concurrency Level:      5

Time taken for tests:   8.54946 seconds

Complete requests:      100

Failed requests:        16

(Connect: 0, Length: 16, Exceptions: 0)

Write errors:           0

Total transferred:      328742 bytes

HTML transferred:       297542 bytes

Requests per second:    12.41 [#/sec] (mean)

Time per request:       402.747 [ms] (mean)

Time per request:       80.549 [ms] (mean, across all concurrent requests)

Transfer rate:          39.85 [Kbytes/sec] received

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:      161  170   7.3    172     196

Processing:   190  224  59.2    207     613

Waiting:      166  199  58.9    183     589

Total:        352  394  59.7    380     774

Percentage of the requests served within a certain time (ms)

50%    380

66%    384

75%    395

80%    400

90%    417

95%    532

98%    680

99%    774

100%    774 (longest request)

[root@server ~]#

HTTPERF

       httperf  [--burst-length  N] [--client I/N] [--close-with-
       reset] [-d|--debug  N]  [--failure-status  N]  [-h|--help]
       [--hog] [--http-version S] [--num-calls N] [--num-conns N]
       [--port N] [--rate X] [--recv-buffer N] [--send-buffer  N]
       [--server  S]  [--think-timeout X] [--timeout X] [--uri S]
       [-v|--verbose]  [-V|--version]  [--wlog  y|n,F]   [--wsess
       N,N,X] [--wset N,X]

Manual: http://www.hpl.hp.com/research/linux/httperf/httperf-man.txt

AUTOBENCH

O autobench pode ser executado desta forma:

autobench --single_host --host1 www.test.com --uri1 /10K --quiet
          --low_rate 20 --high_rate 200 --rate_step 20 --num_call 10
          --num_conn 5000 --timeout 5 --file resultado.tsv

O resultado deste comuando vai ser o arquivo resultado.tsv:

----------------------
dem_req_rate	req_rate_testhost	con_rate_testhost
min_rep_rate_testhost	avg_rep_rate_testhost	max_rep_rate_testhost
stddev_rep_rate_testhost	resp_time_testhost	net_io_testhost	errors_testhost
200	199.3	19.9	182.0	199.7	200.6	2.6	90.0	243.7	0
300	298.4	29.8	273.8	299.2	300.6	4.6	90.0	364.9	0
400	397.2	39.7	364.7	398.6	401.8	7.1	90.1	485.7	0
500	495.7	49.6	454.9	497.8	501.8	10.1	90.1	606.0	0
600	593.7	59.4	546.0	596.7	601.8	13.6	90.1	725.9	0
700	691.5	69.1	637.6	695.6	700.2	16.7	90.1	845.5	0
800	788.8	78.9	728.6	794.1	802.8	20.7	90.1	964.4	0
900	885.9	88.6	819.5	892.8	900.4	24.3	90.2	1083.2	0
1000	982.5	98.3	910.6	991.1	1008.2	28.8	90.2	1201.3	0
1100	1078.8	107.9	1001.7	1089.1	1101.2	32.8	90.2	1319.0	0
1200	1175.0	117.5	1092.6	1186.5	1200.4	38.0	90.5	1436.6	0
1300	1270.4	127.0	1182.5	1283.1	1312.3	44.9	90.6	1553.3	0
1400	1365.8	136.6	1273.3	1381.7	1401.1	47.8	91.4	1669.9	0
1500	1459.3	145.9	1341.9	1474.6	1505.1	65.1	100.8	1784.2	0
1600	1549.5	155.0	1414.9	1561.9	1607.7	72.6	124.2	1894.5	0
1700	1619.9	162.0	1443.8	1628.7	1726.8	96.6	212.4	1980.6	0
1800	1580.3	158.3	1478.3	1656.2	1757.1	100.2	282.6	1932.2	0.016025641025641
1900	1636.8	165.6	1481.0	1646.9	1759.6	118.4	300.1	2001.2	0.115314586283633
----------------------
2000	1641.5	173.0	1502.6	1659.1	1741.4	94.3	312.5	2006.9	0.53740779768177

Um exemplo de gráfico gerado pelo autobench:

Agora com o tempo de execução eu cheguei a conclusão que a nova versão precisa de melhorias na performance, pois a antiga ainda está ganhando :(

Abraços,
Fernando Costa

Fontes:
http://www.xenoclast.org/autobench/
http://www.hpl.hp.com/research/linux/httperf/
http://www.apache.org/

One Response to “Como fazer um Benchmark de aplicações HTTP”

  1. Wagner Elias - Think Security First » links for 2007-09-18 Says:

    [...] Fernando Costa » Como fazer um Benchmark de aplicações HTTP Uma experiência com ferramentas de benchmark em HTTP (tags: HTTP Tools CapacityPlaning) Converta este post para pdf. [...]

Leave a Reply

You must be logged in to post a comment.