Apache2 benchmarks - desempenho muito ruim

1

Eu tenho dois servidores nos quais testo a configuração do apache2.

O primeiro servidor:

4GB of RAM, AMD Athlon (tm) 64 X2 Dual Core Processor 5600 + 
Apache 2.2.3, mod_php, mpm prefork: 
Settings: 

Timeout 100 
KeepAlive On 
MaxKeepAliveRequests 150 
KeepAliveTimeout 4 

<IfModule Mpm_prefork_module> 
    StartServers 7 
    MinSpareServers 15 
    MaxSpareServers 30 
    MaxClients 250 
    MaxRequestsPerChild 2000 
</ IfModule> 

Compiled in modules: 
  core.c 
  mod_log_config.c 
  mod_logio.c 
  prefork.c 
  http_core.c 
  mod_so.c 

Segundo servidor:

8GB of RAM, Intel (R) Core (TM) i7 CPU [email protected] 
Apache 2.2.9, **fcgid, mpm worker, suexec**

PHP scripts are running via fcgi-wrapper 

Settings: 

Timeout 100 
KeepAlive On 
MaxKeepAliveRequests 100 
KeepAliveTimeout 4 

<IfModule Mpm_worker_module> 
    StartServers 10 
    MaxClients 200 
    MinSpareThreads 25 
    MaxSpareThreads 75 
    ThreadsPerChild 25 
    MaxRequestsPerChild 1000 
</ IfModule> 

Compiled in modules: 
  core.c 
  mod_log_config.c 
  mod_logio.c 
  worker.c 
  http_core.c 
  mod_so.c 

Os resultados do teste a seguir, que são muito estranhos!

Novo servidor (conteúdo dinâmico - php via fcgid + suexec):

Server Software:    Apache/2.2.9
Server Hostname:    XXXXXXXX
Server Port:    80
Document Path:  XXXXXXX
Document Length:    179512 bytes
Concurrency Level:  10
Time taken for tests:   0.26276 seconds
Complete requests:  1000
Failed requests:    0
Total transferred:  179935000 bytes
HTML transferred:   179512000 bytes
Requests per second:    38.06
Transfer rate:  6847.88 kb/s received
Connnection Times (ms)
    min avg max
Connect:    2   4   54
Processing: 161 257 449
Total:  163 261 503

Servidor antigo (conteúdo dinâmico - mod_php):

Server Software:    Apache/2.2.3
Server Hostname:    XXXXXX
Server Port:    80
Document Path:  XXXXXX
Document Length:    187537 bytes
Concurrency Level:  10
Time taken for tests:   173.073 seconds
Complete requests:  1000
Failed requests:    22
(Connect: 0, Length: 22, Exceptions: 0)
Total transferred:  188003372 bytes
HTML transferred:   187546372 bytes
Requests per second:    5777.91
Transfer rate:  1086267.40 kb/s received
Connnection Times (ms)
    min avg max
Connect:    3   3   28
Processing: 298 1724    26615
Total:  301 1727    26643

Servidor antigo: conteúdo estático (arquivo jpg)

Server Software:        Apache/2.2.3
Server Hostname:        xxxxxxxxx
Server Port:            80

Document Path:          /images/top2.gif
Document Length:        40486 bytes

Concurrency Level:      100
Time taken for tests:   3.558 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      40864400 bytes
HTML transferred:       40557482 bytes
Requests per second:    281.09 [#/sec] (mean)
Time per request:       355.753 [ms] (mean)
Time per request:       3.558 [ms] (mean, across all concurrent requests)
Transfer rate:          11217.51 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        3   11   4.5     12      23
Processing:    40  329  61.4    339    1009
Waiting:        6  282  55.2    293     737
Total:         43  340  63.0    351    1020

Novo servidor - conteúdo estático (arquivo jpg)

Server Software:        Apache/2.2.9
Server Hostname:        XXXXX
Server Port:            80

Document Path:          /images/top2.gif
Document Length:        40486 bytes

Concurrency Level:      100
Time taken for tests:   3.571531 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      41282792 bytes
HTML transferred:       41030080 bytes
Requests per second:    279.99 [#/sec] (mean)
Time per request:       357.153 [ms] (mean)
Time per request:       3.572 [ms] (mean, across all concurrent requests)
Transfer rate:          11287.88 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2   63  24.8     66     119
Processing:   124  278  31.8    282     391
Waiting:        3   70  28.5     66     164
Total:        126  341  35.9    350     443

Eu notei que no apache error.log há muitas entradas:

[notice] mod_fcgid: call /www/XXXXX/public_html/forum/index.php with wrapper /www/php-fcgi-scripts/XXXXXX/php-fcgi-starter

O que eu omiti ou não entendi?

Essa diferença nas solicitações por segundo? É possível? Qual poderia ser a causa?

    
por user36022 11.03.2010 / 23:22

2 respostas

1

A coisa que salta em mim é o trabalhador vs prefork. Para isolar, você deve tentar executar o prefork no servidor "novo" / "segundo".

Eu também sou cético em relação ao benchmark "antigo":

Transfer rate:  1086267.40 kb/s received

que é igual a 1,03 GB / s ou 8,2 Gbps. Obviamente, isso é mais rápido que uma porta de 1 Gbps. Você está executando o mesmo teste aqui ou comparando o antigo localmente e o novo remotamente?

Espero que esta não seja uma pergunta muito básica, mas você está fazendo o benching da mesma carga / aplicação? Por exemplo, se você comparar o carregamento de um arquivo estático, como uma imagem, a uma página do php que está fazendo algum processamento, obterá resultados diferentes. Se a sua página do php também está tocando em um banco de dados e o banco de dados é diferente nos dois servidores, isso também afetará os resultados.

Gostaria de sugerir - mais uma vez, no interesse do isolamento - comparando os arquivos estáticos entre os dois. Se você não vê uma diferença lá, tente a mesma página php simples em ambos (isso não faz parte de outro aplicativo, apenas fazendo algo simples como olá mundo em um loop).

Uma vez que você tenha feito um benchmark de maçãs versus maçãs nas várias partes, você deve ter informações suficientes para isolar o que está causando a diferença (é o servidor de banco de dados? o sistema de arquivos? o modelo de forja apache? "a rede? o benchmark em si?).

    
por 11.03.2010 / 23:46
0

1) Você já repetiu isso o suficiente para verificar os resultados?
2) Você está vendo as estatísticas da memória e também verificando os logs de erros? Como esses são dois modelos apache diferentes (encadeados versus bifurcados), o tunning pode ter um grande impacto. Então, eu acho que você iria assistir seus recursos (memória e CPU) na versão do trabalhador e talvez ajustar as opções ajustáveis. 3) Tanto é diferente nestes testes, Apache Model, tamanho do documento que está sendo recuperado, módulos php, talvez você possa tornar os testes um pouco mais similares?

    
por 11.03.2010 / 23:39