Я сейчас очень запутался ...
Я всегда использовал 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 будет выше, хотя для достижения того же параллелизма, что может быть или не быть большим недостатком в зависимости от вашей доступной оперативной памяти и максимального ожидаемого параллелизма.