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 для открытия файловых дескрипторов
|