* [Sysadmins] apache tuning in nginx presence @ 2007-08-20 17:38 Michael Shigorin 2007-08-21 5:55 ` Slava Dubrovskiy 2007-08-22 11:16 ` Denis Smirnov 0 siblings, 2 replies; 8+ messages in thread From: Michael Shigorin @ 2007-08-20 17:38 UTC (permalink / raw) To: sysadmins Здравствуйте. Тут нарисовались довольно любопытные тенденции по настройке apache-1.3 в качестве бэкенда за nginx. Если традиционно предлагается[1] поднимать в заметной мере параметры, отвечающие за количество свободных серверов, то в случае приёма соединений nginx этот подход, похоже, менее полезен и может быть вредным (увеличивается scheduling overhead). Например, если до внедрения nginx были задействованы такие параметры: MinSpareServers 5 MaxSpareServers 20 StartServers 12 MaxClients 12 и это было близко к оптимуму, то в случае, когда неспешные коннекшны отрабатывает мультиплексирующий nginx, нам гораздо интересней снизить scheduling overhead путём понижения количества процессов, между которыми будет распределяться процессорное время: MinSpareServers 1 MaxSpareServers 2 StartServers 3 MaxClients 4 На двухъядерной однопроцессорной системе (HP ML150 G3, один Xeon 5140, 2G FBDIMM) под Linux 2.6.18 (Server 4.0) и скедулере имени OpenVZ (который "двухэтажный" -- сперва контейнеры, потом задачи в них) исключительно такое изменение конфигурации только apache привело к изменению результатов /usr/sbin/ab -n 100 -c 20 (сто запросов в двадцать потоков) по страничке с форумом: Time per request: 5505.80 -> 4478.60 [ms] (mean) Requests per second: 3.63 -> 4.47 [#/sec] (mean) Time per request: 275.29 -> 223.93 [ms] (mean, across all concurrent requests) Percentage of the requests served within a certain time (ms) 50% 4785 -> 4285 66% 5825 -> 4472 75% 6879 -> 4610 80% 7076 -> 4681 90% 8408 -> 4826 95% 9112 -> 5005 98% 9587 -> 5071 99% 9656 -> 5136 100% 11491 -> 5276 (last request) При этом MySQL настроен по соотносящейся части так[2]: thread_cache = 8 thread_concurrency = 2 Настройка ставила своей целью наличие не менее двух потенциально конкурентных процессов на одно процессорное ядро согласно общей практике расчёта оптимальной загрузки системы, но при этом в отличие от обычных рекомендаций -- была направлена на разумную минимизацию количества конкурирующих экземпляров httpd, которые в данной постановке задачи занимаются почти исключительно работой с веб-приложением, а не дисковым или сетевым I/O и таким образом конкурируют практически исключительно за CPU и RAM. Т.е. ограничение количества наиболее активных процессов до двух на ядро позволило выиграть примерно 10% латентности по нижней границе и более 50% -- по верхней. Нагрузка выглядит как две пары httpd:mysql с распределением потребления процессора примерно как 10:1 на каждое ядро; уменьшение MaxClients до двух с тем, чтобы ещё снизить конкуренцию, принесло ~10% уменьшение верхней границы (100%), но при этом примерно на ту же величину подняло нижнюю границу. Проварьировав связку с "1-2-3-4", получилось, что при количестве одновременных подключений 4/20/40/100 среднее время на запрос особенно не изменяется (скорость остаётся около 4.50/сек). Последнее замерялось как -n 500 -c 100. Если эти результаты окажутся полезными -- буду рад включить ещё несколько комментариев в штатный httpd.conf нашего apache-1.3.x. PS: народ в Bcc:, надеюсь, не обидится, что поленился форвардить :) PPS: ещё надеюсь, что не открыл америку через Форточку :) [1] http://people.redhat.com/alikins/system_tuning.html [2] http://fly.osdn.org.ua/~mike/docs/mysql-tuning.txt -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-08-20 17:38 [Sysadmins] apache tuning in nginx presence Michael Shigorin @ 2007-08-21 5:55 ` Slava Dubrovskiy 2007-08-21 7:55 ` Michael Shigorin 2007-08-22 11:16 ` Denis Smirnov 1 sibling, 1 reply; 8+ messages in thread From: Slava Dubrovskiy @ 2007-08-21 5:55 UTC (permalink / raw) To: ALT Linux sysadmin discuss [-- Attachment #1: Type: text/plain, Size: 597 bytes --] Michael Shigorin пишет: > Тут нарисовались довольно любопытные тенденции по настройке > apache-1.3 в качестве бэкенда за nginx. > Вот еще бы такое потестировать и для apache-2 ... > Если эти результаты окажутся полезными -- буду рад включить ещё > несколько комментариев в штатный httpd.conf нашего apache-1.3.x. > Да, полезно очень. Спасибо. -- WBR, Dubrovskiy Vyacheslav [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/x-pkcs7-signature, Size: 3249 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-08-21 5:55 ` Slava Dubrovskiy @ 2007-08-21 7:55 ` Michael Shigorin 0 siblings, 0 replies; 8+ messages in thread From: Michael Shigorin @ 2007-08-21 7:55 UTC (permalink / raw) To: ALT Linux sysadmin discuss On Tue, Aug 21, 2007 at 08:55:09AM +0300, Slava Dubrovskiy wrote: > > Тут нарисовались довольно любопытные тенденции по настройке > > apache-1.3 в качестве бэкенда за nginx. > Вот еще бы такое потестировать и для apache-2 ... Потестируй ;-) Я его сейчас не применяю. -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-08-20 17:38 [Sysadmins] apache tuning in nginx presence Michael Shigorin 2007-08-21 5:55 ` Slava Dubrovskiy @ 2007-08-22 11:16 ` Denis Smirnov 2007-08-22 11:44 ` Michael Shigorin 1 sibling, 1 reply; 8+ messages in thread From: Denis Smirnov @ 2007-08-22 11:16 UTC (permalink / raw) To: shigorin, sysadmins 20.08.07, Michael Shigorin<mike@osdn.org.ua> написал(а): > Если традиционно предлагается[1] поднимать в заметной мере > параметры, отвечающие за количество свободных серверов, > то в случае приёма соединений nginx этот подход, похоже, > менее полезен и может быть вредным (увеличивается scheduling > overhead). Именно так. Есть одно принципиальное исключение -- надо учитывать latency. То есть если по каким-то причинам время выдачи одним апачем ответа существенно большое на отдельных страницах, то количество бэкендов приходится увеличивать. > MinSpareServers 5 > MaxSpareServers 20 > StartServers 12 > MaxClients 12 Везет... мне StartServer 50 надо было делать, а MaxClients 100 на одном их хостов не хватало... А когда я их увеличил оказалось что надо поднимать и в MySQL лимиты. > и это было близко к оптимуму, то в случае, когда неспешные > коннекшны отрабатывает мультиплексирующий nginx, нам гораздо > интересней снизить scheduling overhead путём понижения количества > процессов, между которыми будет распределяться процессорное время: > MinSpareServers 1 > MaxSpareServers 2 > StartServers 3 > MaxClients 4 Что-то вроде. Правда логику по которой надо рассчитывать оптимум для этих значений я так и не смог продумать. > Time per request: 5505.80 -> 4478.60 [ms] (mean) А что так дофига? > Requests per second: 3.63 -> 4.47 [#/sec] (mean) > Time per request: 275.29 -> 223.93 [ms] (mean, across all concurrent requests) > > Percentage of the requests served within a certain time (ms) > 50% 4785 -> 4285 > 66% 5825 -> 4472 > 75% 6879 -> 4610 > 80% 7076 -> 4681 > 90% 8408 -> 4826 > 95% 9112 -> 5005 > 98% 9587 -> 5071 Я правильно понимаю, что это 5 секунд на ответ? И что только 50% успевают получить ответ за 4 секунды? > 99% 9656 -> 5136 > 100% 11491 -> 5276 (last request) > > При этом MySQL настроен по соотносящейся части так[2]: > > thread_cache = 8 > thread_concurrency = 2 > > Настройка ставила своей целью наличие не менее двух потенциально > конкурентных процессов на одно процессорное ядро согласно общей > практике расчёта оптимальной загрузки системы, Тут есть тонкость -- не все процессы хотят проц, многие хотят всего лишь диск. Особенно касаемо MySQL. Именно поэтому я пока остановился на логике "4 треда на ядро". > но при этом > в отличие от обычных рекомендаций -- была направлена на разумную > минимизацию количества конкурирующих экземпляров httpd, которые > в данной постановке задачи занимаются почти исключительно работой > с веб-приложением, а не дисковым или сетевым I/O и таким образом > конкурируют практически исключительно за CPU и RAM. Дисковым I/O они не будут заниматься исключительно когда ты сделаешь все на FastCGI каком. А пока у тебя на один запрос минимум: а) прочитать код скрипта; б) попытаться прочитать .htaccess (если он не отключен); в) попытаться прочитать .htacces во всей иерархии каталогов до текущего; г) намусорить в лог; Далее, если используется PHP, то мы ещё обычно грузим все include'ы (а если не грузим потому как умные и юзаем кэши, то тогда как минимум stat на все include'ы по всей цепочке). > Т.е. ограничение количества наиболее активных процессов до двух > на ядро позволило выиграть примерно 10% латентности по нижней > границе и более 50% -- по верхней. А вот это бесспорно. nginx отлично справляется с сериализацией потоков запросов. Собственно на том самом сайте где то установки nginx не справлялось 100 дочек апача, сейчас их трудится несколько штук. > Нагрузка выглядит как две пары httpd:mysql с распределением > потребления процессора примерно как 10:1 на каждое ядро; > уменьшение MaxClients до двух с тем, чтобы ещё снизить > конкуренцию, принесло ~10% уменьшение верхней границы (100%), > но при этом примерно на ту же величину подняло нижнюю границу. Ты ещё обрати внимание на то, что на сайте обычно находятся страницы которые исполняются сильно разное количество времени. И вот они могут здорово тормозить всех остальных. В теории необходимо их выносить и обслуживать отдельным апачем, и nginx разруливать по разным апачам обращения к разным страницам. > PPS: ещё надеюсь, что не открыл америку через Форточку :) Вообще знание этих фактов позволяет заточить конфиги под один конкретный сайт чтобы он летал со скоростью света. А вот придумать более-менее универсальную схему крайне сложно. Мало того, я осмелюсь утверждать что это практически невозможно. Я как-то развлекался с идеей спроектировать особо шустрый хостинг для особо сложных проектов. Так вот все закончилось на том, что либо с самого начала проектирования сайта в процессе участвует головастый товарищ, который каждые две секунды пинает всех по поводу того как правильно писать код с точки зрения производительности, либо можно слегка (в разы) поднять производительность силами грамотного админа (который попытается порезать сайт на подсайты, натравить несколько апачей на один и тот же сайт, разрулить между ними обращения со стороны nginx, а дальше непрерывно мониторить и крутить настройки). > [1] http://people.redhat.com/alikins/system_tuning.html > [2] http://fly.osdn.org.ua/~mike/docs/mysql-tuning.txt ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-08-22 11:16 ` Denis Smirnov @ 2007-08-22 11:44 ` Michael Shigorin 2007-09-01 20:34 ` Денис Смирнов 0 siblings, 1 reply; 8+ messages in thread From: Michael Shigorin @ 2007-08-22 11:44 UTC (permalink / raw) To: sysadmins On Wed, Aug 22, 2007 at 03:16:24PM +0400, Denis Smirnov wrote: > То есть если по каким-то причинам время выдачи одним апачем > ответа существенно большое на отдельных страницах, то > количество бэкендов приходится увеличивать. Угу, но это скорее anti-DoS уже получается. > > MinSpareServers 5 > > MaxSpareServers 20 > > StartServers 12 > > MaxClients 12 > Везет... мне StartServer 50 надо было делать, а MaxClients 100 > на одном их хостов не хватало... А когда я их увеличил > оказалось что надо поднимать и в MySQL лимиты. Это у тебя так долго барахлишко тарахтело? Я бы попробовал разбросать по разным апачам с разными лимитами на время исполнения скрипта, наверное. И всё-таки держать их не более двух-трёх на процессор, иначе ты всё равно только дольше разрываешь скедулер. > > и это было близко к оптимуму, то в случае, когда неспешные > > коннекшны отрабатывает мультиплексирующий nginx, нам гораздо > > интересней снизить scheduling overhead путём понижения > > количества процессов, между которыми будет распределяться > > процессорное время: > > MinSpareServers 1 > > MaxSpareServers 2 > > StartServers 3 > > MaxClients 4 > Что-то вроде. Правда логику по которой надо рассчитывать > оптимум для этих значений я так и не смог продумать. Я ж писал -- по два активных процесса на CPU core, это довольно известное правило оптимальной загрузки при наличии I/O (бишь когда задача не исключительно в CPU и только в него упёрлась). У меня в парах httpd/mysqld активным можно было считать httpd, поскольку он отъедал примерно на порядок больше времени. > > Time per request: 5505.80 -> 4478.60 [ms] (mean) > А что так дофига? Дели на 20 и учитывай, что это один двуствольный Xeon -- они для веба по всем тестам оптеронам проигрывают, как sr@ припомнил аж на прошлой неделе. (если докинуть второй процессор, то коэффициент масштабирования для dualcore ~0.78 на linpack, для quad core xeon -- ~0.74 или около того) > > Time per request: 275.29 -> 223.93 [ms] (mean, across all concurrent requests) Это поделенное. > > Percentage of the requests served within a certain time (ms) > > 50% 4785 -> 4285 > Я правильно понимаю, что это 5 секунд на ответ? И что только > 50% успевают получить ответ за 4 секунды? На двадцать ;-) За четыре с лишним, но поскольку обслуживаются они в моём варианте ограничений более последовательно -- то кто первый пришёл, тот более-менее первым и уйдёт. Т.е. вися в очереди, они не пытаются отгрызть свой кусочек процессора, пока он не доступен в разумной мере (это когда накладные на распределение не сопоставимы с распределяемым ресурсом). Вместо двадцати запросов, которые попытаются считаться ~5 сек ближе к одновременно, получается четыре, которые меньше чем за полсекунды выплёвываются, потом следующие четыре, etc. > > При этом MySQL настроен по соотносящейся части так[2]: > > thread_cache = 8 > > thread_concurrency = 2 > > Настройка ставила своей целью наличие не менее двух > > потенциально конкурентных процессов на одно процессорное ядро > > согласно общей практике расчёта оптимальной загрузки системы, > Тут есть тонкость -- не все процессы хотят проц, многие хотят > всего лишь диск. Особенно касаемо MySQL. Именно поэтому я пока > остановился на логике "4 треда на ядро". Так у меня и получается 2*httpd+2*mysqld на ядро. Опускание до 1* тоже описано, как и предполагалось -- хуже. > > но при этом в отличие от обычных рекомендаций -- была > > направлена на разумную минимизацию количества конкурирующих > > экземпляров httpd, которые в данной постановке задачи > > занимаются почти исключительно работой с веб-приложением, > > а не дисковым или сетевым I/O и таким образом конкурируют > > практически исключительно за CPU и RAM. > Дисковым I/O они не будут заниматься исключительно когда ты > сделаешь все на FastCGI каком. А пока у тебя на один запрос > минимум: > а) прочитать код скрипта; Это не дисковое I/O, а shm в php-mmcache ;) (кстати, это только мне показалось или и php5-eaccelerator, и php5-xcache в 4.0 скорее прикидываются рабочими?) > б) попытаться прочитать .htaccess (если он не отключен); > в) попытаться прочитать .htacces во всей иерархии каталогов до текущего; Это всё из дискового кэша. Поскольку я люблю noatime для таких разделов, да и вообще почти по умолчанию. > г) намусорить в лог; Вот это запись. > > Т.е. ограничение количества наиболее активных процессов до > > двух на ядро позволило выиграть примерно 10% латентности по > > нижней границе и более 50% -- по верхней. > А вот это бесспорно. nginx отлично справляется с сериализацией > потоков запросов. Собственно на том самом сайте где то > установки nginx не справлялось 100 дочек апача, сейчас их > трудится несколько штук. Так я и говорю -- попробуй _ограничить_ этими несколькими штуками. > > Нагрузка выглядит как две пары httpd:mysql с распределением > > потребления процессора примерно как 10:1 на каждое ядро; > > уменьшение MaxClients до двух с тем, чтобы ещё снизить > > конкуренцию, принесло ~10% уменьшение верхней границы (100%), > > но при этом примерно на ту же величину подняло нижнюю границу. > Ты ещё обрати внимание на то, что на сайте обычно находятся > страницы которые исполняются сильно разное количество времени. > И вот они могут здорово тормозить всех остальных. Ессно. Это было на стенде, хотя после переехало и в реальную жисть на старый одномоторный P4 с IDE и DDR266. На глаз ему тоже несколько полегчало -- при том, что в отличие от стенда там роботы топчутся и порой люди ходят. > В теории необходимо их выносить и обслуживать отдельным апачем, > и nginx разруливать по разным апачам обращения к разным > страницам. Да-да-да-да-да ;-) Интересно, что я ещё написал, не прочитав уже написанное тобой там, чуть ниже? ;-) > > PPS: ещё надеюсь, что не открыл америку через Форточку :) > Вообще знание этих фактов позволяет заточить конфиги под один > конкретный сайт чтобы он летал со скоростью света. А вот > придумать более-менее универсальную схему крайне сложно. Мало > того, я осмелюсь утверждать что это практически невозможно. Ну я и не брался это утверждать. > Я как-то развлекался с идеей спроектировать особо шустрый хостинг для > особо сложных проектов. Так вот все закончилось на том, что либо с > самого начала проектирования сайта в процессе участвует головастый > товарищ, который каждые две секунды пинает всех по поводу того как > правильно писать код с точки зрения производительности, либо можно > слегка (в разы) поднять производительность силами грамотного админа > (который попытается порезать сайт на подсайты, натравить несколько > апачей на один и тот же сайт, разрулить между ними обращения со > стороны nginx, а дальше непрерывно мониторить и крутить настройки). Естественно. Причём какой-нить редкого ума околовнедренец, выключивший кэш на одной-единственной посещаемой странице ради какой-нить своей финтифлюшки, может угробить весь сайт -- наблюдался тут не шибко давно один такой случай со стороны. -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-08-22 11:44 ` Michael Shigorin @ 2007-09-01 20:34 ` Денис Смирнов 2007-09-01 20:51 ` Michael Shigorin 0 siblings, 1 reply; 8+ messages in thread From: Денис Смирнов @ 2007-09-01 20:34 UTC (permalink / raw) To: shigorin, ALT Linux sysadmin discuss [-- Attachment #1: Type: text/plain, Size: 5581 bytes --] On Wed, Aug 22, 2007 at 02:44:25PM +0300, Michael Shigorin wrote: >> То есть если по каким-то причинам время выдачи одним апачем >> ответа существенно большое на отдельных страницах, то >> количество бэкендов приходится увеличивать. MS> Угу, но это скорее anti-DoS уже получается. Если у тебя есть страницы которые по каким-то причинам могут сильно тормозить -- то они сами по себе DoS. Соответственно для хостинга, где запросто какой-нибудь умник таки может склепать подобную страницу, подобная настройка сама по себе DoS. Увы :( > >> MinSpareServers 5 > >> MaxSpareServers 20 > >> StartServers 12 > >> MaxClients 12 >> Везет... мне StartServer 50 надо было делать, а MaxClients 100 >> на одном их хостов не хватало... А когда я их увеличил >> оказалось что надо поднимать и в MySQL лимиты. MS> Это у тебя так долго барахлишко тарахтело? Там автор поделия на PHP шибко умный. Это ещё оно быстро работало, после того как я грязно матерясь смотрел на особо долгие запросы и ручками создавал индексы. MS> Я бы попробовал разбросать по разным апачам с разными лимитами MS> на время исполнения скрипта, наверное. И всё-таки держать их MS> не более двух-трёх на процессор, иначе ты всё равно только дольше MS> разрываешь скедулер. Разрывать-то разрываю. Но когда у тебя пускается одновременно 10 запросов каждый из которых выполняется 5 секунд, а параллельно тарахтит ворох запросов, каждый из которых обрабатывается десятки миллисекунд угадай что будет от заниженого MaxClients. > >> и это было близко к оптимуму, то в случае, когда неспешные > >> коннекшны отрабатывает мультиплексирующий nginx, нам гораздо > >> интересней снизить scheduling overhead путём понижения > >> количества процессов, между которыми будет распределяться > >> процессорное время: > >> MinSpareServers 1 > >> MaxSpareServers 2 > >> StartServers 3 > >> MaxClients 4 >> Что-то вроде. Правда логику по которой надо рассчитывать >> оптимум для этих значений я так и не смог продумать. MS> Я ж писал -- по два активных процесса на CPU core, это довольно MS> известное правило оптимальной загрузки при наличии I/O (бишь MS> когда задача не исключительно в CPU и только в него упёрлась). MS> У меня в парах httpd/mysqld активным можно было считать httpd, MS> поскольку он отъедал примерно на порядок больше времени. Ты сначала расскажи что такое "активный процесс" для обычного web-приложения. Особенно с учетом того что часть запросов тормозиться о диск, а часть о процессор. И ты заранее не знаешь какой из них к чему более жручий. А распараллеливать надо исходя ещё и из этого (пока молотят процессор несколько тредов, можно другими несколькими тредами создавать проблемы HDD). При том что для _правильной_ дисковой системы (то бишь SCSI какие) наборот нужно нагружать диск _параллельно_. MS> Это не дисковое I/O, а shm в php-mmcache ;) (кстати, это только MS> мне показалось или и php5-eaccelerator, и php5-xcache в 4.0 MS> скорее прикидываются рабочими?) Ты не забудь что нормальный кэш все-таки обязан сделать stat() на каждый php-шник и все его include'ы, чтобы убедиться что он не обновился. Так что не все так радужно. Вот в случае если у тебя это FastCGI какой действительно не будет лишнего i/o. Вполне возможно. xcache какие-то намеки на работоспособность даже делает :) Но, возможно, это больше намеки чем работоспособность. > >> Т.е. ограничение количества наиболее активных процессов до > >> двух на ядро позволило выиграть примерно 10% латентности по > >> нижней границе и более 50% -- по верхней. >> А вот это бесспорно. nginx отлично справляется с сериализацией >> потоков запросов. Собственно на том самом сайте где то >> установки nginx не справлялось 100 дочек апача, сейчас их >> трудится несколько штук. MS> Так я и говорю -- попробуй _ограничить_ этими несколькими штуками. Дык я-ж говорю -- пробовал. Получается DoS. Помнишь на f.i когда спамили отдельные странички не грузились (по таймауту резались)? Так вот, в те времена я на себе это ограничение и прочувствовал. Из-за нескольких заспамленых страничек f.i ложился целиком и полностью. Потому что несколько человек обращались к ним, и в результате весь остальной сайт был попросту недоступен. У меня есть идея как решить эту проблему, но решать надо не на уровне апача, а на уровне nginx. Чтобы он держал connections pool с сервером фиксированого размера, и имел два таких пула -- один общий, а один для "тормозов". И если попался "тормоз" то переводил соединение в другой пул, а первый -- освобождал. Так по крайней мере DoS'а настройками не будет, хотя и исчезнет возможность защитится от внешнего DoS'а. >> В теории необходимо их выносить и обслуживать отдельным апачем, >> и nginx разруливать по разным апачам обращения к разным >> страницам. MS> Да-да-да-да-да ;-) Интересно, что я ещё написал, не прочитав MS> уже написанное тобой там, чуть ниже? ;-) :) MS> Естественно. Причём какой-нить редкого ума околовнедренец, MS> выключивший кэш на одной-единственной посещаемой странице ради MS> какой-нить своей финтифлюшки, может угробить весь сайт -- MS> наблюдался тут не шибко давно один такой случай со стороны. Кстати в nginx есть ещё одна фича, которую я пока ещё не начал применять но возможно таки начну -- его встроеный SSI. Совместно с предгенерированием части контента может быть тоже весьма интересной штукой. -- С уважением, Денис http://freesource.info ---------------------------------------------------------------------------- Папа! А что означает Format C: Complete? [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-09-01 20:34 ` Денис Смирнов @ 2007-09-01 20:51 ` Michael Shigorin 2007-09-11 14:12 ` Денис Смирнов 0 siblings, 1 reply; 8+ messages in thread From: Michael Shigorin @ 2007-09-01 20:51 UTC (permalink / raw) To: ALT Linux sysadmin discuss On Sun, Sep 02, 2007 at 12:34:58AM +0400, Денис Смирнов wrote: > >> То есть если по каким-то причинам время выдачи одним апачем > >> ответа существенно большое на отдельных страницах, то > >> количество бэкендов приходится увеличивать. > MS> Угу, но это скорее anti-DoS уже получается. > Если у тебя есть страницы которые по каким-то причинам могут > сильно тормозить -- то они сами по себе DoS. Соответственно для > хостинга, где запросто какой-нибудь умник таки может склепать > подобную страницу, подобная настройка сама по себе DoS. Увы :( Ага, только в этом случае DoS ещё контролируемый, а если у тебя двадцать бэкендов жуют один процессор, то поди ещё доберись их отстрелить... (даже если ты monit) Бишь между полным DoS'ом, когда приходится звонить-бутать, и частичным я всё-таки выберу второе. Ну и за прошешдую неделю ни разу не жалел. > MS> Это у тебя так долго барахлишко тарахтело? > Там автор поделия на PHP шибко умный. Это ещё оно быстро > работало, после того как я грязно матерясь смотрел на особо > долгие запросы и ручками создавал индексы. IMHO это VPS и ССЗБ. > >> Что-то вроде. Правда логику по которой надо рассчитывать > >> оптимум для этих значений я так и не смог продумать. > MS> Я ж писал -- по два активных процесса на CPU core, это довольно > MS> известное правило оптимальной загрузки при наличии I/O (бишь > MS> когда задача не исключительно в CPU и только в него упёрлась). > MS> У меня в парах httpd/mysqld активным можно было считать httpd, > MS> поскольку он отъедал примерно на порядок больше времени. > Ты сначала расскажи что такое "активный процесс" для обычного > web-приложения. Здесь это выглядело как libhttpd.ep+mysqld. > Особенно с учетом того что часть запросов тормозиться о диск, а > часть о процессор. И ты заранее не знаешь какой из них к чему > более жручий. А распараллеливать надо исходя ещё и из этого > (пока молотят процессор несколько тредов, можно другими > несколькими тредами создавать проблемы HDD). При том что для > _правильной_ дисковой системы (то бишь SCSI какие) наборот > нужно нагружать диск _параллельно_. Я ж не спорю, и для более другого тазика выставил бы более другие циферки. Специально же описал железо и соображения. -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Sysadmins] apache tuning in nginx presence 2007-09-01 20:51 ` Michael Shigorin @ 2007-09-11 14:12 ` Денис Смирнов 0 siblings, 0 replies; 8+ messages in thread From: Денис Смирнов @ 2007-09-11 14:12 UTC (permalink / raw) To: shigorin, ALT Linux sysadmin discuss [-- Attachment #1: Type: text/plain, Size: 3014 bytes --] On Sat, Sep 01, 2007 at 11:51:04PM +0300, Michael Shigorin wrote: MS> Ага, только в этом случае DoS ещё контролируемый, а если у тебя MS> двадцать бэкендов жуют один процессор, то поди ещё доберись их MS> отстрелить... (даже если ты monit) MS> Бишь между полным DoS'ом, когда приходится звонить-бутать, MS> и частичным я всё-таки выберу второе. Ну и за прошешдую MS> неделю ни разу не жалел. Вопрос в том, сколько именно backend'ов делать. Если у тебя DoS каждый день будет, то увы и ах -- никого это не устроит. Глянь в код SeirosWiki, если разберешься как оно работает будешь очень громко материться. Так вот ответственно заявляю -- это поделие _нельзя_ таким образом защищать. Иначе убиваться будет. Собственно один из периодов когда меня все материли за постоянные gateway timeout были потому как я попробовал такое сделать. > MS>> Это у тебя так долго барахлишко тарахтело? >> Там автор поделия на PHP шибко умный. Это ещё оно быстро >> работало, после того как я грязно матерясь смотрел на особо >> долгие запросы и ручками создавал индексы. MS> IMHO это VPS и ССЗБ. Так и сделано. А проку-то там -- в этом VPS все равно пара десятков апачей крутятся. А если они у меня не будут крутиться -- клиент уйдет к тому, у кого они крутиться будут :( > >>> Что-то вроде. Правда логику по которой надо рассчитывать > >>> оптимум для этих значений я так и не смог продумать. > MS>> Я ж писал -- по два активных процесса на CPU core, это довольно > MS>> известное правило оптимальной загрузки при наличии I/O (бишь > MS>> когда задача не исключительно в CPU и только в него упёрлась). > MS>> У меня в парах httpd/mysqld активным можно было считать httpd, > MS>> поскольку он отъедал примерно на порядок больше времени. >> Ты сначала расскажи что такое "активный процесс" для обычного >> web-приложения. MS> Здесь это выглядело как libhttpd.ep+mysqld. У меня mysqld обычно процессорного времени жрет мало, а вот работает долго. Диски :( >> Особенно с учетом того что часть запросов тормозиться о диск, а >> часть о процессор. И ты заранее не знаешь какой из них к чему >> более жручий. А распараллеливать надо исходя ещё и из этого >> (пока молотят процессор несколько тредов, можно другими >> несколькими тредами создавать проблемы HDD). При том что для >> _правильной_ дисковой системы (то бишь SCSI какие) наборот >> нужно нагружать диск _параллельно_. MS> Я ж не спорю, и для более другого тазика выставил бы более другие MS> циферки. Специально же описал железо и соображения. Я для архива комментирую возможные грабли такого решения, которые могут оказаться неочевидными для тех, кто на них не напарывался. В любом случае есть очень важная вещь -- конфиги у разных сервисов могут и должны быть сильно разными. -- С уважением, Денис http://freesource.info ---------------------------------------------------------------------------- [...] python22-devel тоже provides python-devel, и он лексикографически круче. -- ldv in devel@ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-09-11 14:12 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2007-08-20 17:38 [Sysadmins] apache tuning in nginx presence Michael Shigorin 2007-08-21 5:55 ` Slava Dubrovskiy 2007-08-21 7:55 ` Michael Shigorin 2007-08-22 11:16 ` Denis Smirnov 2007-08-22 11:44 ` Michael Shigorin 2007-09-01 20:34 ` Денис Смирнов 2007-09-01 20:51 ` Michael Shigorin 2007-09-11 14:12 ` Денис Смирнов
ALT Linux sysadmins discussion This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \ sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com public-inbox-index sysadmins Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.sysadmins AGPL code for this site: git clone https://public-inbox.org/public-inbox.git