Назад | Перейти на главную страницу

Почему Apache 2.4.7 в тестах ab так же быстр, как NginX 1.4.6?

Я сейчас очень запутался ...

Я всегда использовал Nginx для обслуживания статических файлов и передачи php в Apache. Я построил новую коробку с оперативной памятью 4 ГБ, установил Apache 2.4.7 с модулем mpm_prefork и NginX 1.4.6. Я настроил то, что мне было нужно, и решил провести тесты на пресс. Я был шокирован увиденным. Во всех тестах ab Apache показал себя примерно так же хорошо, как NginX.

Подходит ли это для Apache 2.4? Я читал об увеличении производительности с помощью версии 2.4, однако в прошлом NginX уничтожал Apache. Я что-то упускаю?

Apache:

Concurrency Level:      100
Time taken for tests:   1.157 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      279000 bytes
HTML transferred:       21000 bytes
Requests per second:    864.65 [#/sec] (mean)
Time per request:       115.654 [ms] (mean)
Time per request:       1.157 [ms] (mean, across all concurrent requests)
Transfer rate:          235.58 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       24   32  11.3     27     236
Processing:    27   78  15.6     77     380
Waiting:       26   78  15.6     77     379
Total:         55  109  21.1    104     404

Percentage of the requests served within a certain time (ms)
  50%    104
  66%    116
  75%    121
  80%    123
  90%    129
  95%    135
  98%    162
  99%    173
 100%    404 (longest request)

NginX:

Concurrency Level:      100
Time taken for tests:   1.026 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      362000 bytes
HTML transferred:       21000 bytes
Requests per second:    975.00 [#/sec] (mean)
Time per request:       102.564 [ms] (mean)
Time per request:       1.026 [ms] (mean, across all concurrent requests)
Transfer rate:          344.68 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       24   33  14.4     29     223
Processing:    24   34  39.2     28     664
Waiting:       24   34  39.2     28     664
Total:         50   67  42.2     57     691

Percentage of the requests served within a certain time (ms)
  50%     57
  66%     72
  75%     76
  80%     77
  90%     80
  95%     86
  98%     97
  99%    240
 100%    691 (longest request)

Это согласуется со всеми моими тестами. У этого теста самый большой разрыв в производительности из всех моих тестов. Обычно Apache получает примерно на 5-10% меньше необработанных запросов в секунду NginX.

Если Apache 2.4 на самом деле близок к NginX, то я не вижу смысла в настройке обратного прокси и всей остальной сложности, которая с ним связана.

Мысли?

В таком тесте я бы ожидал, что Apache будет поддерживать в рабочем состоянии 100 дочерних процессов на протяжении всего теста после их запуска, поэтому в результате он сможет достичь сопоставимой производительности с управляемой событиями моделью одного процесса Nginx. Бьюсь об заклад, вы даже сможете еще больше сократить пробел в тестах, если установите StartServers и MinSpareServers на 100 для Apache. Я бы ожидал, что использование памяти во всех процессах httpd будет выше, хотя для достижения того же параллелизма, что может быть или не быть большим недостатком в зависимости от вашей доступной оперативной памяти и максимального ожидаемого параллелизма.