2013-02-20 3 views
12

Я искал в течение нескольких дней, чтобы увидеть, если кто-то сделал хороший, документированную, обработка PHP сравнение скорости междуPHP скорость обработки данных Apache 2.4 MPM-PreFork mod_php 5,4 против Nginx 1.2.x PHP-FPM 5,4

  • апаша-MPM-PreFork 2,4 с mod_php 5,4

и

  • Nginx 1.2.x + PHP-FPM 5.4

Почему я ищу: Единственный тест, который я видел, - это тесты, выполняющие полные страницы или Hello, World-like test, без надлежащей документации о том, что именно было проверено. Меня не интересует запрос/секунды, аппаратное обеспечение, но мне нужно посмотреть, какой скрипт PHP был протестирован и с какой именно конфигурацией.

Почему эти два: mod_php был известен как самый быстрый в обработке PHP (нет статических файлов, не измерения запроса/ответа, просто обрабатывать сам PHP), но много изменилось с тех пор, в том числе апача версии. Nginx и PHP-FPM потребляют намного меньше памяти, поэтому было бы хорошей причиной для изменения архитектуры, но если они не будут достаточно быстрыми в этом случае, это изменение будет неактуальным.

Я знаю, что если я не могу найти то, что я должен сделать это сам, но я не могу поверить, что никто не сделал тест, как это до сих пор :)

+0

«просто обработка самого PHP» Ни mod_php, ни php-fpm не выполняет обработку php. Они просто называют встроенный интерпретатор, который выполняет всю работу за них. И php-интерпретатор в обоих случаях одинаковый. – VBart

+0

Нет, это не так, или, точнее, не совсем. В первом случае интерпретатор построен как модуль для apache, что означает, что он в основном работает внутри apache, как часть его, а второй - FPM, который является службой FastCGI, которая была отправлена ​​с PHP на некоторое время. Однако ответ, очевидно, будет включать время связи между nginx и сервером FPM, который в этом случае является частью времени обработки. Извините, если вопрос не совсем ясен. – petermolnar

ответ

12

Я закончил этот тест на CentOS 6.3 используя nginx 1.2.7, apache 2.4.3 и php 5.4.12 все скомпилированные без изменений по умолчанию.

./configure 
make && make install 

За исключением PHP, где я включен PHP-FPM

./configure --enable-fpm 

Все серверы имеют 100% конфигурации по умолчанию, за исключением случаев, указанных ниже. Все испытания проводились на тестовом сервере без нагрузки и перезагрузки между тестами. Сервер имеет процессор Intel (R) Xeon (R) E3-1230, 1 Гб оперативной памяти и 2 х 60GB SSD в RAID 1. Испытания проводились с использованием ab -n 50000 -c 500 http://127.0.0.1/test.php

тест PHP скрипт:

<?php 

$testing = 0; 

for ($i = 0; $i < 1000; $i++) { 

    $testing++; 

} 

echo $testing; 

Я также должен был включить php в nginx.conf, поскольку по умолчанию он не включен.

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; 
    include  fastcgi_params; 
} 

Nginx - РНР-МПФ на 127.0.0.1:9000

Concurrency Level:  500 
Time taken for tests: 10.932 seconds 
Complete requests:  50000 
Failed requests:  336 
    (Connect: 0, Receive: 0, Length: 336, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  336 
Total transferred:  7837824 bytes 
HTML transferred:  379088 bytes 
Requests per second: 4573.83 [#/sec] (mean) 
Time per request:  109.317 [ms] (mean) 
Time per request:  0.219 [ms] (mean, across all concurrent requests) 
Transfer rate:   700.17 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 34 338.5  0 7000 
Processing:  0 34 166.5  23 8120 
Waiting:  0 34 166.5  23 8120 
Total:   13 68 409.2  23 9846 

Percentage of the requests served within a certain time (ms) 
    50%  23 
    66%  28 
    75%  32 
    80%  33 
    90%  34 
    95%  46 
    98%  61 
    99% 1030 
100% 9846 (longest request) 

Nginx - PHP-FPM через гнездо (изменение конфигурации, чтобы fastcgi_pass)

fastcgi_pass unix:/var/lib/php/php.sock; 

Concurrency Level:  500 
Time taken for tests: 7.054 seconds 
Complete requests:  50000 
Failed requests:  351 
    (Connect: 0, Receive: 0, Length: 351, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  351 
Total transferred:  7846209 bytes 
HTML transferred:  387083 bytes 
Requests per second: 7087.70 [#/sec] (mean) 
Time per request:  70.545 [ms] (mean) 
Time per request:  0.141 [ms] (mean, across all concurrent requests) 
Transfer rate:   1086.16 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 26 252.5  0 7001 
Processing:  0 24 112.9  17 3683 
Waiting:  0 24 112.9  17 3683 
Total:   7 50 306.4  17 7001 

Percentage of the requests served within a certain time (ms) 
    50%  17 
    66%  19 
    75%  20 
    80%  21 
    90%  23 
    95%  31 
    98%  55 
    99% 1019 
100% 7001 (longest request) 

Апач - mod_php

Concurrency Level:  500 
Time taken for tests: 10.979 seconds 
Complete requests:  50000 
Failed requests:  0 
Write errors:   0 
Total transferred:  9800000 bytes 
HTML transferred:  200000 bytes 
Requests per second: 4554.02 [#/sec] (mean) 
Time per request:  109.793 [ms] (mean) 
Time per request:  0.220 [ms] (mean, across all concurrent requests) 
Transfer rate:   871.67 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 22 230.2  1 7006 
Processing:  0 58 426.0  18 9612 
Waiting:  0 58 425.9  18 9611 
Total:   5 80 523.8  19 10613 

Percentage of the requests served within a certain time (ms) 
    50%  19 
    66%  23 
    75%  25 
    80%  26 
    90%  31 
    95%  36 
    98% 1012 
    99% 1889 
100% 10613 (longest request) 

Я буду более чем рад настроить apache дальше, но кажется, что apache просто не может идти в ногу. Явным победителем является nginx с php-fpm через сокет.

+1

спасибо за это, это довольно интересно, хотя есть вещи, которые меня поддерживают: есть неудачные запросы с настройками nginx, пока этого не происходит с apache. Вы знаете, почему? – petermolnar

+0

Это ошибка '[error] 725 # 0: * 200854 connect() для unix: /var/lib/php/php.sock не удалось (11: ресурс временно недоступен) при подключении к восходящему потоку, клиент: 127.0.0.1, server: localhost, request: «GET /test.php HTTP/1.0», upstream: «fastcgi: // unix: /var/lib/php/php.sock:», host: «127.0.0.1» 'каждый так часто , при стандартной конфигурации вы получите «502 плохой шлюз», когда nginx не сможет перейти на задний конец, или задний конец «уйдет». – sjdaws

+0

вы можете попробовать разбить параметр ядра, а именно net.core.somaxconn в sysctl.conf, например, до 8192, что должно быть достаточно, чтобы не генерировать ошибку, подобную этой. – petermolnar

-4

Кажется, вы сравниваете яблоки с апельсинами или более точными, вы смешиваете результаты, настраивая две переменные. Разумеется, было бы разумнее сравнивать Apache + fastcgi + php-fpm с nginx + php-fpm? Вы ожидали бы, что часть php-fpm будет одинаковой, поэтому тогда вы будете лучше оценивать Apache_fastcgi vs nginx.

+0

Мне нужны были ответы на этот конкретный сценарий, поскольку вопрос для компании заключался в том, чтобы решить, к какому направлению двигаться. – petermolnar

Смежные вопросы