From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00, DNS_FROM_AHBL_RHSBL, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Date: Fri, 30 Oct 2015 11:54:05 +0000 From: Konstantin Lepikhov To: sysadmins@lists.altlinux.org Message-ID: <20151030115405.GA19931@lks.home> References: <20151029230914.GA11034@lks.home> <5895453bc51d32b06cc13937d483f457@office.etersoft.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <5895453bc51d32b06cc13937d483f457@office.etersoft.ru> X-Operation-System: ALT Linux starter kit (Trientalis) 4.2.0-lks-wks-alt1 User-Agent: Mutt/1.5.23.88.hg577987ca2d02 (2014-03-12) Subject: Re: [Sysadmins] =?utf-8?b?0J7Qs9GA0LDQvdC40YfQtdC90LjQtSDQutC+0Ls=?= =?utf-8?b?0LjRh9C10YHRgtCy0LAg0LrQu9C40LXQvdGC0L7QsiDQvdCwINGF0L7RgdGC?= =?utf-8?b?INC00LvRjyBBcGFjaGUgSVRL?= X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux sysadmins' discussion List-Id: ALT Linux sysadmins' discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Oct 2015 11:54:10 -0000 Archived-At: List-Archive: Hi Vitaly! On 10/30/15, at 11:37:49 AM you wrote: > Konstantin Lepikhov писал 2015-10-30 2:09: > ... > >> Но MaxClients задаёт ограничение на количество процессов, общее для > >> всех пользователей и хостов. > >> > >> Есть параметр MaxClientsVhost, который можно указывать в конфиге > >> сайта. > >> Но между ними большое отличие в поведении: > >> При превышении MaxClients Apache просто не реагирует на коннекты к > >> нему, таким образом накапливается очередь подключений, > >> и пользователи при перегрузке испытывают замедление реакции сайта. > > А цель какая? Ограничить кол-во подключений или кол-во процессов? > > Если > > подключения, то да, limit_req в nginx для каждого vhost'а, если > > процессы, > > то крутить cgroups. > Цель — ограничить количество одновременных процессов, обрабатывающих > запросы к конкретному сайту. > limit_req даёт возможность ограничить количество обращений в секунду, и > таким образом > может защитить от внешнего врага. Мне же нужно защититься от врага > внутреннего. > Если сайт вместо 200мс начнёт отвечать за 10с (не важно по каким > причинам), всё не должно рухнуть от > количества процессов апача и не должны пострадать соседи по апачу > (другие сайты). > А cgroups будет давать ошибку при форке? И помешает другим процессам > под этим же UID. Был какой-то патч для cgroups, который как раз ограничивал кол-во форков, но его надо допиливать под текущие ядра, мне предлагали это сделать под wks ядра, но у меня нет времени и желания этим заниматься. https://lists.unsafe.ru/pipermail/kernels/2013-September/000382.html > > >> А ограничение по MaxClientsVhost сразу возвращает 503 при достижении > >> предела подключений. Что вовсе не желательно, потому > >> что для клиента выглядит как то, что сайт работает быстро, но иногда > >> вместо страницы — ошибка. > >> > >> Может быть есть всем известное решение, которое я не знаю? > >> > >> Другой вариант — это научить nginx ошибку 503 не передавать клиенту, > >> а > >> ждать и пытаться получить от бэкенда более корректный ответ. > > в этом случае nginx должен что-то ответить клиенту вместо 503 > > (поскольку > > "ждать" он не умеет), что тоже не есть гуд. > Ну умеет же nginx proxy_next_upstream, и ждать он может, если ему не > отвечать (при достижении ограничения через MaxClients). > > Я для себя пока сделал вывод, что либо MaxClientsVHost должен уметь > переводить запрос в очередь, как это делается при достижении MaxClients, > либо nginx должен уметь ждать и делать повторы. Он умеет это при > нескольких upstream (там есть и timeout и количество попыток и код > ошибки 503 понимает). > Видимо, это либо платная функциональность (в nginx Plus есть слово > queue), либо достижима через расширение. у nginx есть proxy_limit_rate и встроенный perl, через который можно сделать обработку 503 и таймаутов. _limit_rate поможет не отдавать данные быстро, что позволит не понижать время ответа. -- WBR et al.