Apache2 fcgi, mpm_prefork и нагрузка.

Активист

Активист
Команда форума
Вчера взломали сайт клиента на одном из серверов, сайт на ужасной джумле, load average поднялся до со штатных 3-5 до 180. Начались задержки. Что кто куда посылал не разбирался, закрыл учетку.

Собственно пых работает как fcgi. Был установлен FcgidMaxProcessesPerClass равный 15, снизил до 10.

На фронте стоит nginx (отдает кое-где статику).

fcgi настроен сейчас так.

Код:
root@serv002:~# cat /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  FcgidConnectTimeout 20
  FcgidMaxProcessesPerClass 10
  FcgidMaxRequestLen 1073741824
  IPCCommTimeout 600
</IfModule>
Есть следующие модули
Код:
root@serv002:~# apache2ctl -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
actions_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
dir_module (shared)
env_module (shared)
fcgid_module (shared)
include_module (shared)
info_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
rpaf_module (shared)
setenvif_module (shared)
status_module (shared)
suexec_module (shared)
vhost_alias_module (shared)
ispmgr_module (shared)
Syntax OK
Мод форка
Код:
root@serv002:~# cat /etc/apache2/apache2.conf | grep mpm_prefork_module -A 8
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   4000
</IfModule>
Какие рекомендованные параметры? Еще , у каждого юзера свой sh для запуска PHP (ispmgr), собственно FcgidMaxProcessesPerClass 10 в этом случае (разделенный PHP) даст создать не больше 10 процессов PHP для каждого юзера, или для одного процесса апача? Есть ли какой-то удобный способ на debian squeezy как-то организовать лимитирования.

Сколько запросов может обработать один fcgi процесс PHP?

Сейчас на Debian Sid появился systemd , там конечно можно создать классы и лимитировать и т.п., конечно systemd лучше sysvinit , но на сквизи я думаю не поставить))
 

fixxxer

К.О.
Партнер клуба
Я боюсь, тут уже все забыли, что такое апач. :)

А почему бы не запускать fpm, по пулу на пользователя с собственными лимитами? Там ж давно есть dynamic, хоть и кривоватый. И пусть пользователь выжирает свой личный лимит.
Насколько я помню, fcgid умеет работать в режиме, аналогичном nginx-овскому fastcgi_pass - когда просто указываешь юникс-сокет на fastcgi-демон.
 

Активист

Активист
Команда форума
На серверах ISPManager для юзеров. Нужен апач. Не знаю ни одной панели, которая бы юзала PHP-FPM.
 

fixxxer

К.О.
Партнер клуба
Панели в последний раз видел очень давно, но неужели там до сих пор хардкод конфигов? В моем понимании, современная панель реализуется как веб-интерфейс к системе конфигурации наподобие puppet, а уж какие именно конфиги и по каким шаблонам делать - это вопрос настройки обработчиков событий в очереди. Неужели до сих пор такое же убожество как cpanel?
 

Активист

Активист
Команда форума
Кстати, а как лимитируются ресурсы для юзера по пулу? Не встречал) Интересует CPU, IO, Memory.
 

Активист

Активист
Команда форума
Панели в последний раз видел очень давно, но неужели там до сих пор хардкод конфигов? В моем понимании, современная панель реализуется как веб-интерфейс к системе конфигурации наподобие puppet, а уж какие именно конфиги и по каким шаблонам делать - это вопрос настройки обработчиков событий в очереди. Неужели до сих пор такое же убожество как cpanel?
ISPManager хардкорный. Он даже в Apache 2 подгружает свой модуль (shared .so). Какие-то иные не встречал лучше. Все бажные. ISPManager хоть стабилен) Сам я не юзаю панели управления.
 

fixxxer

К.О.
Партнер клуба
cgroups? Можно, кстати, делать мини-виртуализацию per-application, через systemd-nspawn или его подобие. Правда, это уже виртуализация получается :)

UPD: на сквизи, конечно, с этим не очень =)
 

Активист

Активист
Команда форума
Сам в debian sid, сижу, знаю все эти прекрасные плюшки)) но на серверах squeezy lts (long time support). Лести туда особо не хочу, ибо "работает - не трогай :))"
 

fixxxer

К.О.
Партнер клуба
Ну, вообще я вот вижу в squeeze-backports достаточно свежие ядра. Линукс-контейнеры вообще достаточно простая штука если не заморачиваться с виртуализацей сети - все, по сути, сводится к системному вызову clone() с кучкой флагов и настройке cgroups - можно обойтись без всяких systemd и прочих lxc, но надо хорошо понимать что делаешь :) вот например простенький cli-интерфейс к clone().
 

Активист

Активист
Команда форума
cgexec кстати.. Можно запускать fcgi/cgi экземляр через cgexeс)) Пойду поковыряю))
 
Сверху