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
Резюмирую
При одинаковых настройках nginx+apache+mod_php и nginx+php-fpm связка nginx+php-fpm успевает обработать все запросы без таймаутов а значит является более быстрой чем nginx+apache+mod_ph
Текущий конфиг - в посте выше
Сейчас ошибок в nginx + apache нет
Но некоторые страницы открывает >300 сек, что в ab считается за провал
Так что все работает но мееедленно :)
На Хабре писал же
Тестим москита, делаем ab на главную 20k
С беклогом любой дурак сможет 🤣
Ок, сделаю беклог 10240
И 8 процессов
ListenBacklog 10240
ServerLimit><------>8
StartServers 4
MaxClients 8
Проверяем
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
Пусть помучает его ночью, чтоб наглядно было
Я ставил 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 знают больше разработчиков апача?