- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
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 знают больше разработчиков апача?
Andreyka , В вашем переводе нигде не написано, что делается отдельный форк на каждый запрос.
Назад отлистайте. Там ваш коллега (шутка) написал :
nginx перед apache мало что даст, ибо сама суть apache - делать отдельный процесс на каждый вызов и php-fpm - обрабатывать все вызовы статичными процессами в памяти.
Нагрузку и тормоза дают именно форки апача, если же туда поставить apache как worker, то тормозов будет значительно меньше, особенно если процессы worker сделать по числу камней ;)
Вот именно с этими словами никто не согласен.
Обратите внимание на название : классическая модель работы называется prefork - ПРЕДВАРИТЕЛЬНЫЙ fork.
Ну и, принимая во внимание схему работы php, значительность выбора sapi сильно преувеличена.
Различия в потреблении памяти между процессами и тредами на linux и bsd, где техника fork-ов шлифовалась десятилетиями, не такие уж большие, в сравнении с потреблением php.
netwind, это очень легко проверить - ставим лимит в 100 процессов по 10 backlog в каждом. Открываем 1k медленных запросов. Наблюдаем 100 процессов. nginx перед апачем не зря ставят - он прикрывает это.
Разница между форком и тредом конечно не большая, но если посмотреть на графики то видно как растет LA за счет переключения контекста между процессами. Так что все относительно.
Andreyka, и не нада тут nginx приплетать.
Ну хорошо, давайте по-вашему, повторите тест : nginx+apache c раскрученным backlog против nginx+fpm, но не давайте apache плодиться - поставьте то же самое число обработчиков в maxclients сколько обработчиков у fpm. maxrequestperchild - ну, например, 10000.
Неужели будут разительные отличия?
Dlag и Pilat. Я в шоке от вас обоих. Какие треды в префорковских процессах? Учите документацию:
Мы то как раз выучили, чего и вам желаем.
Не стоит читать только что вам хочется и додумывать что вам кажется. ;)
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
Ну во-первых. Для корректного теста апач должен быть за nginx - надеюсь это очевидно. Второе. maxclients должно быть реальным, не 1000 а 10 например. Вообще это хорошо определяется числом ядер и оперативной памятью. Ну и судя по графикам опять мы видим тест в бредовом исполнении.14 гигабайт памяти... 700 процессов... тестируется винчестер что ли?
Pilat добавил 25.12.2009 в 23:01
Dlag и Pilat. Я в шоке от вас обоих. Какие треды в префорковских процессах? Учите документацию:
http://httpd.apache.org/docs/2.0/misc/perf-tuning.html, выдержка:
Не надо мне приписывать чужие слова про треды. Демагогические приёмы оставьте для других форумов.
Тест запущен пока что в логах 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
Пусть помучает его ночью, чтоб наглядно было
Тест запущен пока что в логах 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
Вот чтобы не было таких ляпов и нужно учится читать:
http://marc.info/?l=nginx&m=121431775121264&w=2
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 процессов ну никак нехватает на нормальную работу :)