Для тестирования я создал небольшой Hello world скрипт. Почему я не выбрал что-то посложнее? Ответ прост: в интерпритаторе PHP не должно быть особой разницы производительности. Почему же тогда я не создал абсолютно пустую страницу? Дело в том, что хотелось протестировать двунаправленную передачу данных. Целью является тестирование скорости работы веб-сервера в целом, а не только PHP.
Базовые тесты дают нам следующие результаты:.
Apache с mod_php
Total transferred: 3470000 bytes HTML transferred: 120000 bytes Requests per second: 2395.73 [#/sec] (mean) Time per request: 4.174 [ms] (mean) Time per request: 0.417 [ms] (mean, across all concurrent requests) Transfer rate: 811.67 [Kbytes/sec] received
NginX с PHP-FPM
Total transferred: 1590000 bytes HTML transferred: 120000 bytes Requests per second: 5166.39 [#/sec] (mean) Time per request: 1.936 [ms] (mean) Time per request: 0.194 [ms] (mean, across all concurrent requests) Transfer rate: 801.82 [Kbytes/sec] received
Apache удалось обработать 2400 запросов в секунду в отличии от Nginx. Он справился с 2500 запросами. Такого большого количества я раньше никогда не видел. Я выполнил те же запросы с -c -f для Apache, чтобы узнать причины такой разницы. -c отображает время системных запросов, -f следует ответвлениям. Какой же результат для первых 10 строк?
% time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 33.65 0.042063 4 10003 getcwd 16.10 0.020127 2 10001 writev 16.00 0.019994 2 10001 shutdown 10.54 0.013179 0 51836 40118 open 9.01 0.011263 1 20008 semop 5.22 0.006522 0 54507 10002 read 2.53 0.003158 0 10024 write 1.91 0.002386 0 88260 66483 close 1.57 0.001959 245 8 clone 1.16 0.001455 0 54832 384 stat64
getcwd? Но почему? После я вспомнил, что у меня активировано AllowOverwrite (.htaccess). Выполнил те же тесты после отключения этой функции.
Total transferred: 3470000 bytes HTML transferred: 120000 bytes Requests per second: 5352.41 [#/sec] (mean) Time per request: 1.868 [ms] (mean) Time per request: 0.187 [ms] (mean, across all concurrent requests) Transfer rate: 1813.40 [Kbytes/sec] received
С 5352 обработанными запросами Apache опередил NginX. Но что же произойдет тогдпн, когда объем передаваемых данных увеличится? Я создал около 100k контента и попробовал снова.
Apache
Total transferred: 1051720000 bytes HTML transferred: 1048570000 bytes Requests per second: 2470.24 [#/sec] (mean) Time per request: 4.048 [ms] (mean) Time per request: 0.405 [ms] (mean, across all concurrent requests) Transfer rate: 253710.79 [Kbytes/sec] received
NginX
Total transferred: 1050040000 bytes HTML transferred: 1048570000 bytes Requests per second: 2111.08 [#/sec] (mean) Time per request: 4.737 [ms] (mean) Time per request: 0.474 [ms] (mean, across all concurrent requests) Transfer rate: 216476.53 [Kbytes/sec] received
В этот раз разница была заметнее. Ощущаются некие изменения. PHP встроен в mod_php Apache, что должно ускорять его. Если на Вашем сервере работает только PHP, то это должно быть лучшим решением в плане производительности.
Если Вы работаете с разными языками вроде CSS, JS и изображениямм, тогда Вам больше подойдет NginX. Его производительность будет выше, но PHP быстрее не станет. Он также будет надежнее в плане защиты от DDoS, но CDN по-прежнему является лучшим решением.
Ниже представлены графики для сравнения производительности:
ссылка на оригинал статьи http://habrahabr.ru/post/226875/
Добавить комментарий