тест работы php через apache и nginx

OS:  centos-6
cpu:  Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
RAM:  1Gb
Методика тестирования:
siege -b -c 50  -r 10000 http://10.10.10.10/phpinfo.php
Результаты тестирования представлены в таблице:

КонфигурацияElapsed time secsResponse time secsTransaction rate trans/secThroughput MB/secConcurrency
httpd.worker294.440.031698.1488.8649.53
httpd.prefork301.100.031660.5891.7549.93
httpd.event294.130.031699.9388.9647.81
httpd.ITK10589.401.0647.2249.9649.96
httpd prefork
(mod_fastcgi+php-fpm)
1927.110.19259.4612.9549.89
httpd prefork
(mod_fcgid)
1910.620.19261.7013.2949.91
nginx+php_fpm
(127.0.0.1:9000)
319.530.031564.8014.8949.83
nginx+php-fpm
(via local socket)
317.150.031576.5415.0049.81

Transactions – количество обращений к серверу.
Elapsed time – общая продолжительность тестирования.  Она высчитывается начиная с первого обращения к серверу и кончая получением ответа на последний запрос.
Response time – среднее время за которое сервер успел ответить клиенту.
Transaction rate – среднее число обращений которые сервер успел обработать за секунду. Оно получается путём деления общего числа запросов на затраченное время.
Throughput – среднее число данных передаваемых ежесекундно от сервера к пользователям.
Concurrency – количество одновременных подключений при которых сервер отвечает без задержек.

 

Из это таблицы видно, что apache ITK в 33 раза медленней по сравнению с httpd [prefork, event, worker], и в 5 раз по сравнению с mod_fcgi/mod_fastcgi.

 

Заметки о MPM

Apache (worker MPM) + mod_php

Для обработки динамических запросов используется модуль php, работающий в контексте сервера.

При этом, так как php работает в адресном пространстве сервера, разделяемые потоками данные периодически портятся, поэтому связка нестабильна и не рекомендована. Это происходит из-за ошибок в mod_php, который включает в себя ядро PHP и различные php-модули.

Ошибка в модуле, благодаря одному адресному пространству, может повалить весь сервер.

 

Apache (event mpm) + mod_php

Event MPM — это стратегия работы с worker’ами, которую использует только Apache.  Все — точно так же, как с обычными потоками,  но с небольшим дополнением для обработки Keep-Alive. Установка Keep-Alive служит для того, чтобы клиент мог прислать много запросов в одном соединении. Например, получить веб-страницу и 20 картинок. Обычно, worker заканчивает обработку запроса — и ждет какое-то время (keep-alive time), не последуют ли в этом соединении дополнительные запросы. То есть, просто висит в памяти.

Event MPM создает дополнительный поток, который берет на себя ожидание всех Keep-Alive запросов, освобождая рабочего для других полезных дел. В результате, общее количество worker’ов значительно сокращается, т.к никто теперь не ждет клиентов, а все работают.

 

 

Leave a Reply