Andreyka

Andreyka
Рейтинг
822
Регистрация
19.02.2005
Интересы
Zen
Some like a wizzard

Himiko, а mpm какой? ;)

Для тестирования DLE надо 2 сервера, чтоб вынести mysql, иначе тест будет не очень объективным

Вобщем очевидно, что 8 процессов никак не хватает для нормальной работы, тормоза огромны

Я оставляю на ночь тест с такими параметрами апача:

ListenBacklog 8192

<IfModule mpm_prefork_module>

ServerLimit><------> 32

StartServers 8

MinSpareServers 1

MaxSpareServers 2

MaxClients 32

MaxRequestsPerChild 0

</IfModule>

Посмотрим что будет ночью

По крайней мере munin хоть стал отрываться: http://213.239.211.15/munin/localdomain/localhost.localdomain.html

Andreyka добавил 26.12.2009 в 10:39

Ну хватит думаю. Проверим сколько запросов не успело в 300 секунд:

...

Failed requests: 13039

Failed requests: 13063

Failed requests: 12964

Failed requests: 13377

Failed requests: 13128

Failed requests: 13815

Failed requests: 12634

Failed requests: 12675

...

Из-за большого беклога запросы копились, поступал новые и не успевали обрабатываться. В первом тесте, когда процессов было много - все запросы успевали - но нагрузка и тормоза были выше.

Теперь тот-же самый тест на nginx + php-fpm

Дабы быть справедливым - поставил туда backlog 8192, два пула по 16 процессов с режимом apache-like

Конфиг php-fpm идентичен для apache2 prefork с mod_php

В данном случае меня интересует - успеют ли запросы пройти за 300 секунд и какая будет нагрузка на сервер по сравнению с апачем

Andreyka добавил 26.12.2009 в 14:47

Итак, вот результат по nginx+php-fpm:

Failed requests: 0

Failed requests: 0

Failed requests: 0

Failed requests: 0

Failed requests: 0

Failed requests: 0

Резюмирую

При одинаковых настройках nginx+apache+mod_php и nginx+php-fpm связка nginx+php-fpm успевает обработать все запросы без таймаутов а значит является более быстрой чем nginx+apache+mod_ph

Текущий конфиг - в посте выше

Сейчас ошибок в nginx + apache нет

Но некоторые страницы открывает >300 сек, что в ab считается за провал

Так что все работает но мееедленно :)

На Хабре писал же

Тестим москита, делаем ab на главную 20k

netwind:
Andreyka,
Не,ну нельзя же так. Специально прикидываетесь в целях искусственного раздувания дисскусии ?
Корректное значение для maxclients будет 8. Это число одновременно выполняющихся скриптов php.
backlog придется сильно-сильно открутить, чтобы позволить apache быть в равных условиях с fpm. Если у вас там полезли ошибки - это ваша же вина . Сделайте чтобы не лезли, но число обработчиков php в fpm было равно maxclients.
Тогда тест можно считать показательным.

С беклогом любой дурак сможет 🤣

Ок, сделаю беклог 10240

И 8 процессов

ListenBacklog 10240

<IfModule mpm_prefork_module>

ServerLimit><------>8

StartServers 4

MinSpareServers 1

MaxSpareServers 2

MaxClients 8

MaxRequestsPerChild 0

</IfModule>

Проверяем

while true; do ab -t 300 -n 20000 -c 20000 http://213.239.211.15/ >> nginx-apache.log ; sleep 5; done

Мунин тупит потому что много коннектов в беклоге - ждите, ответ несразу

Пока что результат первой итерации неутешителен:

Non-2xx responses: 5115

Total transferred: 71403805 bytes

HTML transferred: 67862717 bytes

Requests per second: 306.06 [#/sec] (mean)

Time per request: 65346.327 [ms] (mean)

Time per request: 3.267 [ms] (mean, across all concurrent requests)

Transfer rate: 1067.09 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 521 981 313.0 962 1548

Processing: 347 14432 19665.0 1179 63347

Waiting: 0 14175 19840.3 781 63342

Total: 1005 15413 19705.1 2467 64295

И это с учетом ждать 300 секунд! Если сократить до 60 будет еще хуже.

Pilat, ок остановил и запускаю тот-же вариант с 10 maxclients

Даже backlog не режу иначе совсем плохо. Вот что говорит ab:

Non-2xx responses: 9660

Total transferred: 23556545 bytes

HTML transferred: 21227165 bytes

Requests per second: 320.17 [#/sec] (mean)

Time per request: 62466.302 [ms] (mean)

Time per request: 3.123 [ms] (mean, across all concurrent requests)

Transfer rate: 368.27 [Kbytes/sec] received

В логах nginx:

worker_connections is not enough while connecting to upstream

Andreyka добавил 25.12.2009 в 23:17

Я ничего подкручивать не собираюсь, вот текущий конфиг nginx

user www-data;

worker_processes 2;

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;

events {

worker_connections 10240;

}

Забит беклог? Ну это проблема тормознутого apache c mod_php. С php-fpm в fastcgi это все прекрасно работало.

Andreyka добавил 25.12.2009 в 23:19

Pilat с таким конфигом оно даже munin не открывает,

504 Gateway Time-out

Будем еще проверять или уже видно и так что 10 процессов ну никак нехватает на нормальную работу :)

Тест запущен пока что в логах nginx:

2009/12/25 20:57:40 [alert] 30674#0: *78063 10240 worker_connections is not enough while connecting to upstream, client: 213.239.211.15, server: debian-50-lenny-64-minimal, request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:8080/", host: "213.239.211.15

ab говорит Non-2xx responses: 18229

Пусть помучает его ночью, чтоб наглядно было

netwind:
Andreyka, и не нада тут nginx приплетать.
Ну хорошо, давайте по-вашему, повторите тест : nginx+apache c раскрученным backlog против nginx+fpm, но не давайте apache плодиться - поставьте то же самое число обработчиков в maxclients сколько обработчиков у fpm. maxrequestperchild - ну, например, 10000.
Неужели будут разительные отличия?

Я ставил backlog в 63 и для nginx и для apache. Во время тестов apache успевал отфоркать около 500 запросов - остальное шло в очередь. Чтоб тест был корректным надо в apache выставить backlog в 1.

Кстати у fpm число обработчиков 2x4 процесса по 512 коннектов в каждом - 4096. Так что для корректности я тоже самое значение ставлю и для апача.

Тестирую сейчас только ab главную без эмуляции посещений, график для мониторинга - http://213.239.211.15/munin/localdomain/localhost.localdomain.html

netwind, это очень легко проверить - ставим лимит в 100 процессов по 10 backlog в каждом. Открываем 1k медленных запросов. Наблюдаем 100 процессов. nginx перед апачем не зря ставят - он прикрывает это.

Разница между форком и тредом конечно не большая, но если посмотреть на графики то видно как растет LA за счет переключения контекста между процессами. Так что все относительно.

Dlag и Pilat. Я в шоке от вас обоих. Какие треды в префорковских процессах? Учите документацию:

http://httpd.apache.org/docs/2.0/misc/perf-tuning.html, выдержка:

The prefork MPM uses multiple child processes with one thread each. Each process handles one connection at a time. On many systems, prefork is comparable in speed to worker, but it uses more memory.

Перевод для тех кто мнит себя профессионалами и позволяет себе хамски тыкать пальцами в людей.

Префорк запускает дочерние процессы по одному треду в каждом. Каждый процесс обрабатывает один запрос одновременно. На множества системах префорк одинаков по скоросте с воркером но использует больше памяти.

Надеюсь ума хватит помолчать и не спорить с документацией от самих разработчиков? Или Dlag и Pilat знают больше разработчиков апача?

Всего: 12866