From: "Денис Смирнов" <mithraen@altlinux.ru> To: shigorin@gmail.com, ALT Linux sysadmin discuss <sysadmins@lists.altlinux.org> Subject: Re: [Sysadmins] apache tuning in nginx presence Date: Sun, 2 Sep 2007 00:34:58 +0400 Message-ID: <20070901203458.GB20282@mw.local.seiros.ru> (raw) In-Reply-To: <20070822114425.GE28425@osdn.org.ua> [-- 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 --]
next prev parent reply other threads:[~2007-09-01 20:34 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2007-08-20 17:38 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 ` Денис Смирнов [this message] 2007-09-01 20:51 ` Michael Shigorin 2007-09-11 14:12 ` Денис Смирнов
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20070901203458.GB20282@mw.local.seiros.ru \ --to=mithraen@altlinux.ru \ --cc=shigorin@gmail.com \ --cc=sysadmins@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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