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

Вид: 11218|Ответ: 4

Конфигурация и настройка параметров PHP-FPM

[Скопировать ссылку]
Опубликовано 26.07.2017 9:20:54 | | |
php-fpm.conf Важные параметры подробно объясняются

pid = run/php-fpm.pid
#pid设置 рекомендуется по умолчанию включить var/run/php-fpm.pid в каталоге установки

error_log = log/php-fpm.log
#错误日志 по умолчанию в каталоге установки используется var/log/php-fpm.log

log_level = уведомление
#错误级别. Доступные уровни: предупреждение, ошибка, предупреждение, уведомление, отладка. По умолчанию: уведомление.

emergency_restart_threshold = 60
emergency_restart_interval = 60-е
# указывает, что если количество php-cgi-процессов с ошибками SIGSEGV или SIGBUS превышает emergency_restart_threshold в пределах значения emergency_restart_interval, php-fpm будет плавно перезапущен. Эти два варианта обычно остаются по умолчанию.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Доступные единицы: s (секунды), m (минуты), h (часы) или d (дни). Стандартные единицы: s (секунды). По умолчанию: 0.

демонизация = да
#后台执行fpm значение по умолчанию — да, и если хотите отладить, можно изменить его на нет. В FPM можно использовать разные настройки для запуска нескольких пулов процессов. Эти настройки можно устанавливать индивидуально для каждого пула процессов.

слушать = 127.0.0.1:9000
#fpm监听端口, то есть адрес, обрабатываемый PHP в nginx, обычно является значением по умолчанию. Доступные форматы: 'ip:port', 'port', '/path/to/unix/socket'. Каждый пул процессов должен быть настроен.

listen.backlog = -1
#backlog数, -1 означает неограничение, определяемое операционной системой, просто прокомментируйте эту строку. Ссылка: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP настройте любые так, чтобы не ограничивать IP, если хотите настроить nginx других хостов для доступа к этому FPM-процессу, нужно установить IP-адрес, к которому можно получить доступ за счёт прослушивания. По умолчанию значение — любой. Каждый адрес разделён запятой. Если он не настроен или пуст, любой сервер может запросить соединение

слушать.владелец = www
listen.group = www
режим listen.mode = 0666
#unix опции настройки сокета, если вы используете TCP для доступа, вы можете оставить комментарий здесь.

пользователь = www
группа = www
#启动进程的帐户和组

PM = динамический #对于专用服务器, PM можно установить в статический.
#如何控制子进程 варианты статични и динамичны. Если выбран статический, pm.max_children указывает фиксированное количество дочерних процессов. Если выбран динамический, он определяется следующими параметрами:
pm.max_children #, максимальное количество дочерних процессов
pm.start_servers # — количество процессов при запуске
pm.min_spare_servers # гарантировать минимальное количество простоящих процессов и создать новый дочерний процесс, если процесс простоя меньше этого значения
pm.max_spare_servers#, обеспечьте максимальное количество процессов простоя; если процесс простоя превышает это значение, он будет очищен

pm.max_запросов = 1000
#设置每个子进程重生之前服务的请求数. Это очень полезно для сторонних модулей, у которых могут быть утечки памяти. Если установлено в «0», запрос всегда принимается. Эквивалентно PHP_FCGI_MAX_REQUESTS переменным окружения. По умолчанию: 0.

pm.status_path = /status
#FPM状态页面的网址. Если у вас нет настроек, вы не сможете зайти на страницу статуса. По умолчанию: нет. Будет использоваться мониторинг мунин

ping.path = /ping
#FPM监控页面的ping网址. Если у вас нет настроек, вы не сможете получить доступ к странице пинга. Эта страница используется для внешнего определения живого FPM и может ли отвечать на запросы. Обратите внимание, что она должна начинаться с черной черты (/).

ping.response = pong
#用于定义ping请求的返回相应. Возвращает текст в формате текста/обычного для HTTP 200. По умолчанию: понг.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Эта опция может быть полезна для скриптов, которые не прерываются по особой причине php.ini 'max_execution_time' в настройках. Установка на '0' означает 'Выключено'. Вы можете попробовать изменить эту опцию, когда часто встречаются ошибки 502.

request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后 соответствующая информация стека вызовов PHP будет записана в медленный журнал. Установка на '0' означает 'Выключено'

slowlog = log/$pool.log.slow
#慢请求的记录日志, используйте с request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Значение по умолчанию: Стандартный открытый дескриптор — 1024, который можно просматривать с ulimit -n и изменять с помощью ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Доступные значения: «неограниченно», 0 или положительные целые числа. Значение по умолчанию: системное значение.

chroot =
#启动时的Chroot目录. Определённая папка должна быть абсолютным путём. Если настройки нет, chroot не используется.

chdir =
#设置启动目录, Chdir автоматически отправляется в эту папку при запуске. Определённая папка должна быть абсолютным путём. По умолчанию: текущий каталог или/каталог (при chroot)

catch_workers_output = да
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Если не установлено, stdout и stderr будут перенаправлены на /dev/null согласно правилам FastCGI. По умолчанию: Null.



Настройка параметров php-fpm

pm = динамический; Указывает, какой метод управления объемом процессов используется

Динамический означает, что количество процессов PHP-FPM является динамическим, число указывается pm.start_servers в начале, если запросов больше, оно автоматически увеличивается, чтобы количество простоя не было меньше pm.min_spare_servers, а если число процессов велико, оно также будет очищено, чтобы количество избыточных процессов не превышало pm.max_spare_servers

Статическое означает, что количество процессов в PHP-FPM статично, и число процессов всегда соответствует числу, указанному pm.max_Children, и не увеличивается и не уменьшается

pm.max_детей = 300; Количество php-fpm-процессов, активированных в статическом режиме
pm.start_servers = 20; Количество запускающих процессов php-fpm в динамическом режиме
pm.min_spare_servers = 5; Минимальное количество процессов php-fpm в динамическом режиме
pm.max_запасные_серверы = 35; Максимальное количество php-fpm-процессов в динамическом режиме

Если PM статичен, то допустим только параметр pm.max_children. Система откроет определённое количество php-fpm процессов

Если PM динамический, то параметр pm.max_children недопустим, и вступают в силу последние три параметра. Система начнёт pm.start_servers процессы php-fpm в начале запуска php-fpm, а затем динамически корректирует количество php-fpm процессов между pm.min_spare_servers и pm.max_spare_servers в зависимости от потребностей системы

Итак, какой способ управления проектами лучше выбрать для нашего сервера? На самом деле, как и Apache, при запуске PHP-программ после запуска практически возникают проблемы с утечкой памяти. Вот почему процесс php-fpm занимает около 3 млн памяти в начале, а после некоторого времени он увеличивается до 20-30 млн памяти.

Для серверов с большой памятью (например, 8G и более) более уместно указывать статические max_children, так как это не требует дополнительного управления процессами и повышает эффективность. Поскольку частое переключение процессов php-fpm также приводит к задержке, лучше включать статические эффекты, когда память достаточно велика. Объём также можно получить по памяти/30M, например, 8GB памяти можно установить на 100, а затем память, потребляемую php-fpm, управлять в 2G-3G. Если память немного меньше, например 1G, то указание количества статических процессов более выгодно для стабильности сервера. Это гарантирует, что php-fpm получает достаточно памяти и выделяет небольшое количество памяти другим приложениям, что сделает работу системы более плавной.

Для сервера с небольшой памятью, например, VPS с 256 М, даже если он рассчитан на 20М, 10 php-CGI-процессов будут потреблять 200М, тогда сбой системы должен быть нормальным. Поэтому стоит попытаться контролировать количество php-fpm процессов, а после примерно уточнения памяти, занимаемой другими приложениями, указать статическое небольшое число, что сделает систему более стабильной. Или использовать динамический метод, потому что он завершает избыточный процесс и возвращает часть памяти, поэтому рекомендуется применять его на серверах или VPS с меньшим количеством памяти. Конкретное максимальное количество получается на основе памяти/20M. Например, для 512M VPS рекомендуется установить pm.max_spare_servers на 20. Что касается pm.min_spare_servers, рекомендуется устанавливать его в зависимости от нагрузки сервера, а более подходящее значение — между 5~10.

200 на сервере с 4G-памятью — это нормально (моя тестовая машина для 1G, 64 — лучшая, рекомендуется использовать стресс-тест для максимального соотношения).

pm.max_requests = 10240;

Самая большая проблема в процессе настройки nginx php-fpm — это внутренняя утечка: нагрузка на сервер невелика, но заполнение памяти быстро растёт, быстро поглощает память и начинает разъедать раздел swap, и система быстро отключается! На самом деле, согласно официальному введению, php-cgi не имеет утечки памяти, и php-cgi восстанавливает память после выполнения каждого запроса, но не будет освобождена операционной системой, что приведёт к большому объёму памяти для php-cgi.


Официальное решение — понизить значение PHP_FCGI_MAX_REQUESTS, если используется php-fpm, соответствующий php-fpm.conf — это max_requests, то есть сколько запросов будет отправлено для перезапуска потока, нужно уменьшить это значение, чтобы php-fpm автоматически освобождал память, а не большую часть 51200 в Интернете и т.д., на самом деле, есть ещё одно значение, связанное с этим max_ Дети — это столько процессов будет создано каждый раз при PHP-FPM, чтобы фактическое потребление памяти было max_children*max_requests* Каждый запрос использует память, на основе этого можно оценить использование памяти, поэтому нет необходимости писать скрипты для уничтожения.

request_terminate_timeout = 30;

Максимальное время выполнения, настраиваемое в php.ini (max_execution_time)

request_slowlog_timeout = 2; Включите медленные логи
slowlog = log/$pool.log.slow; Медленный путь по логарифму

rlimit_files = 1024; Добавлено ограничение на php-fpm для открытия файловых дескрипторов





Предыдущий:Анализ неудач проверки состояния HTTP для балансировки нагрузки Alibaba Cloud SLB
Следующий:Проверка файлов DZ x3.4 Отсутствующие файлы
 Хозяин| Опубликовано 28.11.2021 13:42:00 |
[Практика] Проверьте данные о статусе php-fpm через Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Хозяин| Опубликовано 19.12.2021 10:48:43 |
 Хозяин| Опубликовано 16.01.2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP max_spare_servers
;             pm.max_spare_servers — максимальное количество детей в режиме «простоя»
; Стандартное значение: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_spare_servers = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep min_spare_servers
;             pm.min_spare_servers — минимальное количество детей, находящихся в режиме «бездействия»
; Стандартное значение: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep start_servers
;             pm.start_servers — количество детей, созданных при старте.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_requests
pm.max_запросы = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep request_slowlog_timeout
; Примечание: замедление журнала обязательно, если request_slowlog_timeout установлено
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep slowlog
; - 'slowlog'
; Примечание: замедление журнала обязательно, если request_slowlog_timeout установлено
slowlog = /alidata/log/php/$pool.log.slow
; сброшено в файл 'slowlog'. Значение '0s' означает 'off'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Установите лимит дескриптора открытого файла для мастер-процесса.
; rlimit_files = 1024
; Установите максимальный размер ядра для мастер-процесса.
; rlimit_core = 0
; Установите лимит открытого дескриптора файла.
; rlimit_files = 1024
; Установите максимальный размер ядра.
; rlimit_core = 0
[root@old_server конф] #
 Хозяин| Опубликовано 16.01.2022 16:54:04 |
request_terminate_timeout = 10 секунд

Значение по умолчанию — 0 секунд, что означает, что скрипт PHP продолжит выполняться. Таким образом, когда все процессы php-cgi заняты, веб-сервер Nginx+PHP больше не может обрабатывать новые PHP-запросы, и Nginx возвращает пользователю «502 Bad Gateway». request_terminate_timeout = 30 могут использоваться
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com