Кто не знает что такое “sutra” и для чего она нужна – прямиком в гугл. А если это “лишнее” то можно просто почитать заметку о том как все таки мой любимый apache/2.2 подтвердил свой статус. Помнится в былые времена мне один человек на собеседовании доказывал о том что apache2 это хлам и древность, а вот nginx рулит. Ну может кому то и рулит, а для меня консерватора не рулит пока не увижу задач когда индеец подведет.
Все просто – сервак с ТДС системой и тут пятничным вечером под выходные привалило трафа не много ни мало примерно стало 5 лямов в сутки (обращений), как я уже обьяснял своему клиенту – ТДС системе пофигу сколько у тебя уников, а сколько не уников – важно “обращения” к серваку, вот их было примерно 2 миллионов в сутки, а резко стало 5 миллионов. В результате чего основной сервак лег и траф пошел на “запасной”, который то же не выдержал и начал “спотыкаться” и сыпать ошибку “mod_fcgid: can’t apply process slot for /home/sutra/public_html/in.cgi” что вызывало ошибку “HTTP 503” так как был вечер да еще и пятницы – мозг напрочь отказался работать и самое простое что пришло в голову – врубил для домена “round robin dns” и все “ожило”. Далее начал разбираться, сначала была мыслишка что кто то по умному ддосит, но потом откинул эту мысль, так как два сервака тянули. Копание дальше дало инфу о том что как раз накануне падения подключили нового клиента к ТДС а там тарфа много (обращений к сайту), а у меня по старинке апач в префорке, и лимит на 1024 подключения и апач уперся в “server reached MaxClients setting” в результате чего проверяльщик переключился на запасной сервак.
Дальнейшее копание было направлено на убираение ошибки “mod_fcgid: can’t apply process slot for /home/sutra/public_html/in.cgi” так как собственно на запасном сервере крутился apache2-worker и по моим прикидкам не должен был тупить. Из настроек в апаче было прописано лимиты по подключениям:
1 2 3 4 5 6 7 8 9 10 |
<IfModule mpm_worker_module> StartServers 50 MinSpareThreads 100 MaxSpareThreads 200 ThreadLimit 1000 ThreadsPerChild 1000 ServerLimit 4096 MaxClients 3000 MaxRequestsPerChild 0 </IfModule> |
Но основная проблема была в другом – в модуле fcgi, ему не хватало “слотов”, гугление не дало внятного ответа чего же делать кроме того как увеличивать параметры:
FcgidMaxProcesses
FcgidMaxProcessesPerClass
Но проблема вылела потом, этими параметрами можно играться в большую сторону если у тебя апач в префорке а если в воркере – то не надо ему давать “много” – как это было у меня.
В итоге эксперементально – тестовым методом обнаружилось что для apache2-worker параметры
FcgidMaxProcesses
FcgidMaxProcessesPerClass
Должны быть равны и их значение не должно превышать кол-во ядер процессора. В моем случае я выставил:
1 2 3 4 |
FcgidMaxProcesses 8 FcgidMaxProcessesPerClass 8 FcgidMinProcessesPerClass 1 FcgidMaxRequestsPerProcess 0 |
После чего передернул апач, отрубил “round robin dns” для ТДС системы и стал ждать, когда траф “перетек” на перенастроенный сервак – сервер жил, не падал. Трафа много, лог растет безумно быстро, парсил на наличие “HTTP 503” – все отлично – ошибок нет. На момент написания статьи судя по access_log apache2 – у меня траф прет примерно 77 запросов в секунду, при этом ошибок нет, LA = 1 и меньше. Я доволен.
Железо под такой траф простое:
RAM: 32Gb
CPU: AMD Opteron 3365
HDD: 2x1Tb SATA3 TOSHIBA