Настройка PHP-FMP из панели для пользователей

Леонид Леонид добавил(а) 2 мес. назад
В рассмотрении

При использовании Nginx+PHP-FMP используются стандартные настройки выдуманные разработчиками. А редактировать их можно исключительно руками в системных файлах.

Это вызывает достаточно много проблем, особенно при использовании серверов с небольшим количеством RAM в 2-6 ГБ. Дочерние элементы PHP-FMP просто забивают всё т.к. настройки вообще взяты из воздуха. Это критические настройки для стабильной работы сервера.

Лучшим решением было бы сделать эти настройки для каждого пользователя и чтобы с ними запускался сервер PHP-FMP.

Комментарии (5)

фото
2

Сколько сайтов у вас на сервере в 2 гб памяти? 6 гб?

Какие настройки используете вы для таких серверов?

В последних изменениях для каждого сайта отдельный создаётся пул, но дочерние процессы не запускаются пока не будет запросов к ксайту, они будут запускаться по мере необходимости так же как раньше до 5 процессов на каждый сайт и завершаться если в течение 10 секунд находятся в простое.

Вынести управление этими настройками в интерфейс есть в планах.

фото
1

/usr/local/mgr5/etc/templates/fpm.conf

Centos 7

Содержание:

[__name__]

pm = dynamic

pm.start_servers = 1

pm.min_spare_servers = 1

pm.max_children = 5

pm.max_spare_servers = 5

php_admin_value[display_errors] = stderr

php_admin_value[log_errors] = On


То, что вы описываете, это только в режиме ondemand можно сделать т.е., чтобы через 10 секунд они уничтожались. Именно под него я каждый раз перенастраиваю клиентов.

max_spare_servers - значит, что 5 штук будет создано и висеть будет там.

Даже pm.max_requests у вас нет, а он равен по умолчанию 0 т.е. процесс будет пожирать память бесконечно.


Настройка этих данных становиться критичным, когда весь сервер работает в режиме Nginx+PHP-FMP и нужно динамически распределить процессы, чтобы всем хватало.

фото
1

Открыл демку на вашем сайте ISP6 посмотрел файл /usr/local/mgr5/etc/templates/fpm.conf он также не менялся с 2018 года, о каких последних изменениях вы говорите, не совсем понятно.

фото
1

Живу в будущем)

Данное изменение в данный момент в тестировании, будет в одном из ближайших релизов. Будет вот так:

[domain.com]
pm = ondemand
pm.max_children = 5
listen = /var/www/php-fpm/5.sock
listen.mode = 0660
listen.owner = www-root
listen.group = apache
user = www-root
group = www-root
chdir = /
include = /opt/php80/etc/php-fpm.d/site.d/domain.com.conf
include = /opt/php80/etc/php-fpm.d/user.d/www-root.conf
Спасибо за подсказку по pm.max_requests.

А на мои вопросы не ответите? Правда интересно)

фото
1

Никакой не секрет:


 

pm = ondemand
pm.max_children = "от 2  до 10"
pm.process_idle_timeout = 10
pm.max_requests = 500


max_children - подбираю по % потребления памяти 1 процессом.

process_idle_timeout - в вашем конфиге нет. Стандартно он 0.

Тут загвоздка в расчётах.

Допустим, у нас сервер 2 ГБ. 1 поток php-fpm занимает в среднем 5% памяти. 5 потоков * 5% памяти это 25% памяти, грубо говоря.

Всё ничего, но если у нас будет не 1 пользователь, а например 3-и. У каждого же будут свои настройки и каждому по умолчанию выдадут по 5 потоков. А это уже 3 * 25% = 75% памяти. Это критический показатели при котором MySQL явно "не жить", система будет падать.

фото
1

Благодарю за конфиг и разъяснения!

process_idle_timeout - он вроде как дефолтно 10, в старых версиях тоже, но проставим его сами, хуже не будет)

pm.process_idle_timeout mixed
The number of seconds after which an idle process will be killed. Used only when pm is set to ondemand. Available units: s(econds)(default), m(inutes), h(ours), or d(ays). Default value: 10s.
pm.max_requests - выставим рекомендуемое вами значение.


Параметры в релизе с ondemand сразу будет. Также настройки этих параметров вынесем панель, но это позже.

Конфигурационные файлы будут лежать в:

/opt/php80/etc/php-fpm.d/pool.d/ - настройки пула

/opt/php80/etc/php-fpm.d/user.d/ - настройки PHP общие для пользователя

/opt/php80/etc/php-fpm.d/site.d/ - настройки PHP для конкретного сайта


где php80 - меняется в зависимости от версии выбранной версии PHP для сайта.

фото
1

Тоже используем pm.max_requests в шаблоне, ибо без этой опции память "утекает" очень часто.


/usr/local/mgr5/etc/templates/fpm.conf

[__name__]

pm = dynamic

pm.start_servers = 1

pm.min_spare_servers = 1

pm.max_children = 5

pm.max_spare_servers = 5

pm.max_requests = 1000

php_admin_value[display_errors] = stderr

php_admin_value[log_errors] = On

фото