nginx apache или nginx php fpm
Nginx + PHP-FPM против Apache2 Prefork + mod_php
PHP-FPM
Процессы были привязаны к TCP сокету, создано два пула по 4 процесса в каждом в статичном режиме.
nginx
Два воркера по 10240 коннектов каждый, php подключен как апстрим:
upstream php <
server 127.0.0.1:9000 max_fails=1 fail_timeout=60s;
server 127.0.0.1:9001 max_fails=1 fail_timeout=60s;
>
Apache
Отключен Keepalive, а MaxClients и ServerLimit установлены в 10240
Теперь о бенчмарке
Я постарался создать ситуацию сайта под DDOS атакой, когда 20k ботов долбят в главную страницу, а 5000 легальных пользователей ходят по сайту.
Импровизированную DDOS-атаку легко можно при помощи ab. А вот для пользователей пришлось сгенерировать карту сайта и натравить на нее siege.
Естественно, что для бенчмарка с апачем лог писался в apache.log
Перейдем к графикам
Как видно — число процессов изменялось только во время работы Apache, ну так недаром его MPM назвали Prefork. Nginx и PHP-FPM статичны, в чем их большой плюс.
К сожалению график памяти получился не очень красивым, но если посмотреть внимательно — памяти Apache потребляет больше.
Графики переключений между процессами и их форк очень интересно коррелируют между собой.
Раскладка по утилизации CPU тоже явно не в пользу Apache.
Пробьем по логам
Nginx:
Расшифровка — за час работы связка Nginx+PHP-FPM успела пройти 38 итераций и завалить одну из них — 10629 ошибочных запросов. Это было связано с недоступностью апстрима — siege постарался, запустив большинство запросов на главную страницу.
Apache:
А вот с Apache все плохо — даже если вычеркнуть 2 «удачных» попадания siege, то остаются еще ошибки + за отведенное время было выполнено меньше запросов.
Таким образом, по результатам тестирования связка Nginx+PHP-FPM побеждает Apache со счетом 38:23