Сравнительное тестирование apache+mod_php VS nginx+php5_fpm на Zend Framework приложении

// Ноябрь 11th, 2010 // Highload, PHP, Zend Framework

Сейчас рассматриваю варианты увеличения производительности Zend Framework веб-приложения. Один из вариантов — это перевод веб-серера с Apache + mod_php на Nginx + php5-fpm

Итак для просто ты сделал два теста.

Тесты

Первый (конкурентность 1):

andrey@vaio:~$ ab -c 1 -n 10 http://site.new/ru/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Server Software:        Apache/2.2.14
Server Hostname:        site.new
Server Port:            80

Document Path:          /ru/
Document Length:        228538 bytes

Concurrency Level:      1
Time taken for tests:   20.641 seconds
Complete requests:      10
Failed requests:        7
(Connect: 0, Receive: 0, Length: 7, Exceptions: 0)
Write errors:           0
Total transferred:      2287794 bytes
HTML transferred:       2285384 bytes
Requests per second:    0.48 [#/sec] (mean)
Time per request:       2064.055 [ms] (mean)
Time per request:       2064.055 [ms] (mean, across all concurrent requests)
Transfer rate:          108.24 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:  1869 2064 165.0   2027    2292
Waiting:     1825 2024 165.1   1989    2253
Total:       1869 2064 165.0   2027    2292

Percentage of the requests served within a certain time (ms)
50%   2027
66%   2111
75%   2273
80%   2284
90%   2292
95%   2292
98%   2292
99%   2292
100%   2292 (longest request)

А теперь nginx+php5_fpm:

ab -c 1 -n 10 http://site.new/ru/

Server Software:        nginx/0.7.65
Server Hostname:        site.new
Server Port:            80

Document Path:          /ru/
Document Length:        228245 bytes

Concurrency Level:      1
Time taken for tests:   7.281 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      2284030 bytes
HTML transferred:       2282450 bytes
Requests per second:    1.37 [#/sec] (mean)
Time per request:       728.104 [ms] (mean)
Time per request:       728.104 [ms] (mean, across all concurrent requests)
Transfer rate:          306.34 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   668  728  31.6    721     777
Waiting:      661  720  31.4    714     769
Total:        669  728  31.6    721     777

Percentage of the requests served within a certain time (ms)
50%    721
66%    722
75%    755
80%    769
90%    777
95%    777
98%    777
99%    777
100%    777 (longest request)

Второй (конкурентность 5):

andrey@vaio:~$ ab -c 5 -n 10 http://site.new/ru/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Server Software:        Apache/2.2.14
Server Hostname:        site.new
Server Port:            80

Document Path:          /ru/
Document Length:        228538 bytes

Concurrency Level:      5
Time taken for tests:   12.106 seconds
Complete requests:      10
Failed requests:        6
(Connect: 0, Receive: 0, Length: 6, Exceptions: 0)
Write errors:           0
Total transferred:      2287716 bytes
HTML transferred:       2285306 bytes
Requests per second:    0.83 [#/sec] (mean)
Time per request:       6053.053 [ms] (mean)
Time per request:       1210.611 [ms] (mean, across all concurrent requests)
Transfer rate:          184.54 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.4      0       1
Processing:  5005 5740 655.9   5447    6682
Waiting:     4889 5648 634.2   5404    6576
Total:       5005 5740 655.9   5448    6682

Percentage of the requests served within a certain time (ms)
50%   5448
66%   5955
75%   6542
80%   6632
90%   6682
95%   6682
98%   6682
99%   6682
100%   6682 (longest request)
andrey@vaio:~$

А теперь Nginx + php5_fpm:

andrey@vaio:~$ ab -c 5 -n 10 http://site.new/ru/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Server Software:        nginx/0.7.65
Server Hostname:        site.new
Server Port:            80

Document Path:          /ru/
Document Length:        228245 bytes

Concurrency Level:      5
Time taken for tests:   4.227 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      2284030 bytes
HTML transferred:       2282450 bytes
Requests per second:    2.37 [#/sec] (mean)
Time per request:       2113.383 [ms] (mean)
Time per request:       422.677 [ms] (mean, across all concurrent requests)
Transfer rate:          527.71 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    2   4.2      0      13
Processing:   858 1647 974.3   1495    4223
Waiting:      837 1634 975.3   1485    4212
Total:        858 1649 974.9   1506    4227

Percentage of the requests served within a certain time (ms)
50%   1506
66%   1553
75%   1851
80%   1858
90%   4227
95%   4227
98%   4227
99%   4227
100%   4227 (longest request)
andrey@vaio:~$

Выводы

Конкурентность = 1  Apache: 0,48 запроса в секунду,   Nginx: 1,37 запросов в секунду. Время обработки запроса на Nginx: 0,7 сек

Конкурентность = 5 Apache: 0,83  запроса в секунду Nginx: 2,37 запроса в секунду. Время обработки запроса на Nginx: 1,2 сек

Дальше мерял только Nginx:

Конкурентность = 10 Nginx: 3,35 запроса в секунду. Время обработки запроса (среднее): 1,8 сек

Конкурентность = 50 Nginx: 3,41 запроса в секунду. Время обработки запроса (среднее): 14  сек

Получается ускорение на 35% при ч1ём оно судя по всему не зависит от конкурентности.

Также мне кажется, что прирост в общем-то произошел от перехода на nginx а не от php_fpm.

P.S.  Если поменять взаимодействие с порта на cокеты, то производительности это не добавит.

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


8 Responses to “Сравнительное тестирование apache+mod_php VS nginx+php5_fpm на Zend Framework приложении”

  1. Георгий Туревич:

    Какой то показатель низкий.
    2 секунды в первом тесте — это чистое приложение ZF, только что созданное с помощью Zend_Tool?

    APC/eAccelerator — включен?

    • google.com Андрей Токарчук:

      Добрый день, Георгий.
      Приятно выдеть вас в своем блоге. Тестируемое приложение, это наша разработка на ZF, там довольно много SQL-запросов. APC включен. Сейчаскак раз её оптимизируем. Может быть посоветуете что-нибудь ещё?)
      P.S. Вы будете в Киеве на ZFConf?

      • Георгий Туревич:

        Советов по оптимизации sql? Да их сотни :) Explain вам в зубы и Zend_Cache :)

        Как оптимизировать ZF Саша рассказывал на майской Питерской конфе.

        На ZFConf UA пока 50 на 50. Хотелось бы конечно.

  2. […] На продакшен сервере у нас связка Nginx (отдает статику) + Apache (отдает динамику) + mod_php. Задумали отказаться от Apache, а заодно и подключить PHP в режиме FastCGI с помощью php-fpm, т.к. исследование показало прирост скорости. […]

  3. Можно реквестировать тест этой тулзой http://habrahabr.ru/blogs/webdev/65128/?

    • google.com Андрей Токарчук:

      Конечно, это одна из самых поопулярных тулз. Хотя мне больше нравится ab :-)

  4. Bettrrr:

    К тестам надо прекладывать конфиги апач, енджинкса и пхп, т.к. Разные настройти могут сделать тест полностью непригодным

Комментировать