myhand

Рейтинг
278
Регистрация
16.09.2009
netwind:
Ну а зачем nginx нужно больше для активных соединений ? Все остальное это буферы. Их размер скромный и конечный.

Все-таки - поболее будет, чем для активных, не?

netwind:
вот апач в данной ситуации понаплодит переменных во всех своих модулях просто потому что модули написаны для традиционной модели.

Разделяемая память? Этим, мягко говоря, пользуются. MPM очень активно делают независимыми и привязка модулей к конкретному - не приветствуется.

netwind:
Тут "стандартный" не в смысле ограниченности некоторых программистов стандартами, а в том смысле, что эта модель не является изобретением Сысоева лично.

Просто обычно под "стандартным" - подразумевается что-то распространенное, популярная модель. Назвать таковой подход nginx - покуда сложно. Сколько там? - 8% на _нагруженных_ сайтах. А остальное - нешто IIS?

netwind:
Просто одна из известных моделей обработки, особенно выгодная при обслуживании большого числа сетевых соединений.

При каком? Что-то мне подсказывает, что в роли бакенда эта модель покуда редкость. Это случайно?

netwind:
Да вы вон лучше какому-нибудь любимому клиенту фронтенд c nginx на апач смените и проверите на практике. Наверняка, такие найдутся. Желательно проект побольше. С несколькими физическими бекендами.

Работает - не трогай.

Но может и попробую как-нибудь - в тестах смотрится вполне нормально. Плюс, в Debian сейчас можно относительно удобно несколько копий апача запустить. Не нужно гемороя со сборкой пакета nginx, etc. И модулей под апач немало вкусных.

df -h

dmesg

вывод atop

Andreyka:
Топор всем известный инструмент

Хватит уже притчами вещать, на Христа не тянешь ;)

Andreyka:
В том, что у вас троих не получается изба я не сомневаюсь

Избы ты сам строить будешь. А здесь речь шла о работе кеша VFS - проблема в том, что ты этого не понял и пошел вещать прописные истины о совершенно другом.

Пусть меня поправит ТС, но я думаю - он знает как управлять кешем "некрасиво". Грубо говоря - запихивать файл в кеш скриптом. Боюсь, в ситуации ТС больше "настраивать нечего", как заметил netwind.

Andreyka:
По поводу настроек nginx и всего остального обращайся, расскажу что к чему.

Лично у меня после "откровения" о vm.swappiness и vm.vfs_cache_pressure - желание "обращаться" пропало полностью.

alw:
Почему в данной ситуации рекомендуешь число воркеров сделать равным числу ядер?

Патомушта вычитал эту "универсальную" рекоммендацию в каком-то говноблоге. Не?

alw:
А есть ли какой либо способ узнать что именно сейчас закешировано системой? Какой процент хитов в кеш?

Может будет полезно. Есть такая штука, systemtap:

http://sourceware.org/systemtap/wiki/WSCacheHitRate

PS: Применять с осторожностью, беречь от детей.

netwind:
нет речь шла о общем расходе памяти. все потоки apache против всех потоков nginx (из которых спокойно можно оставить один ). активные потоки имеют свои локальные переменные и их в сервере общего назначения много.

Нееет, дядинька. Вы заявили только вот цифирь:

На 10 000 неактивных HTTP keep-alive соединений расходуется около 2.5M памяти;
Ее можно сравнить только с тем, как обрабатываются неактивные keep-alive в апаче.
netwind:
Более того, переключение контекстов происходит каждый раз и при вызове фунций ОС.

Не всех/не всегда, ЕМНИП.

netwind:
Это все стандартная модель работы серверов описанная в литературе. Не обязательно читать код nginx, чтобы понимать как и почему он эффективно работает. Так же работают lighttpd, squid, varnish и менее известные программы.

Стандартная модель - вовсе не эта. Стандарт - это апач. А lighttpd, squid, varnish, nginx - как раз "менее известные программы".

Наверно, их назначение наводит на мысль об ограниченности подобной "стандартной модели"? Или то, что это раздавалки статики да прокси/кешеры - абсолютно случайное совпадение?

netwind:
проще прикинуть хотя бы расходы памяти. они сокращаются до вышеназванных 2.5 мб на 10000 + фиксированной объем на одного worker. И больше никаких расходов нет.

Сокращаются _от чего_? Напоминаю, в апаче тут тоже только один поток.

netwind:
Посчитать эффект от принципиального несоздания потоков по сравнению с их созданием и поддержкой сложно. Но он точно есть.

Переключение контекста. "Созданием" потоков апач занимается только тогда, когда сконфигурирован неправильно, или нагрузка резко подскочила.

netwind:
В промежутках между состояниями keep-alive, фронтенд не может быстро отправить ответ клиенту и освободиться. Все время отправки файла поток в апаче занимает и память и ресурсы ОС. Потоков много и CPU постоянно занимается переключением контекстов. mpm_event устраняет только лишь фазу keep-alive ожидания потоком клиента.

Согласен, хотя думаю что в отношении памяти Вы погорячились. Расход памяти на служебную информацию для создания потока - действительно может быть порядка той, что затрачивается на обработку запроса?

netwind:
нет. я свою часть нашел. теперь вы найдите.

Неправда. Я Вам объяснял уже, что неактивные KeepAlive соединения - обслуживаются в одном потоке.

Допускаю, конечно, что nginx для хранения данных этих соединений использует какой-то шибко эффективный в отношении памяти мегаформат. Но профит явно будет не в разы и даже не с существенным коэффициентом.

netwind:
для меня сравнительная эффективность модели сервера "конечный-автомат без потоков" как в nginx, при обслуживании многих клиентов очевидна.

Ага... Т.е. все-таки - дело-то не в памяти.

Кстати, недостатки этой модели тоже "очевидны". Один из них Вы уже приводили.

Andreyka:
За кеш ОС в ядре Linux отвечают два параметра ядра: vm.swappiness и vm.vfs_cache_pressure:

У... как все запущено.

netwind:
полна фигня

Согласен. Шеф, мы это знали (скажу и за alw - вряд-ли промахнусь ;)).

madoff:
А вы мне покажите багзиллу - я вам показал офф сайт апачи.

Ну дык почитать надо энтот "официальный сайт", ага. Не осилите ссылку "Bug Reports" найти - мы поможем убогим...

netwind:
для апача сами найдите и посчитайте.

Т.е. не знаете?

Для неактивных соединений в keep-alive - тем более неинтересно. Здесь разница вообще стремится к нулю, если вообще есть.

madoff:
Это MPM является экспериментальной, поэтому он может или не может работать, как ожидалось.

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

Насколько я знаю (об этом спрашивали в рассылке), просто этот модуль появился в 2.2 - вот только потому и помечен "экспериментальным".

myhand добавил 21.11.2011 в 20:25

Skom:
Гипотеза верна.
Да, в то время стоял апач стэндалоном. Но это было давно и неправда :)

Что-то я не понимаю. Либо гипотеза верна - и Вы просто заменили одного апача на сякую-вот связку. Либо я ошибся в отношении Вас. В чем неправда-то?

Если я таки прав, то поставь nginx перед апачем (или второй экземпляр апача) - эффект был бы практически тот же самый.

netwind:
точно не то же самое. даже с mpm_event.
число потомков nginx конечно, мало и не зависит от числа одновременно получающих данные клиентов ( не висящих к keep-alive, а именно перекачивающих данные). это приводит к серьезной экономии ресурсов.

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

Внимание, вопрос. Насколько серьезна экономия в ресурсах (речь пока зашла только о памяти)? В цифирях - процентах, разах, попугаях.

netwind:
кроме того, сами традиции и цели создания nginx таковы, что на каждого клиента тратится сравнительно мало памяти.

"Традиции" nginx таковы, что его называют "a horrible hairball of code" в апачевской рассылке.

netwind:
если уж mpm_event появился недавно, то о подобных оптимизациях и речи не было и не будет.

Помним про "корень всех зол" и бесплатный сыр в мышеловке? ;)

DenisVS:
Лениво так крутил свой Апач с МПМ Воркером, всё думал с нагрузкой совладать. Огород городить было лень. Но нагрузки росли... В один прекрасный момент решил, что хватит. Поставил фронтэндом nginx. Ну и получил то, что стала свободная память. Процессор особо не разгрузился, однако, бэкенд так и не настраивал!

Поставили бы фронтендом апач (с тем же воркером или, лучше, mpm_event) - получили бы ровно то же самое.

Skom:
Из цифр: на одном из серваков около ~300 запросов к MySQL в секунду. Загрузка около единички. Сайты самописы. Сервак 2*xeon 2.56 (вроде) и 12 гиг памяти.

Достаточно скромно. Абсолютно не вижу, почему апач вместо php-fpm у Вас не справлялся. Моя гипотеза: бездумная настройка по какому-то хавту (был один апач - стал nginx+etc). Не?

Всего: 4890