php.ini — это основной файл конфигурации для запуска php, ниже приведены некоторые распространенные конфигурации.
extension_dir=""
- Установить путь к библиотеке расширений PHP
expose_php = Off
- Избегайте раскрытия информации PHP в заголовках http
display_errors = Off
- Избегайте показа сообщения об ошибке php, вызывающего mysql
log_errors = On
- Включить журнал ошибок PHP после отключения display_errors (путь настраивается в php-fpm.conf)
zend_extension=opcache.so extension=mysqli.so extension=pdo_mysql.so
- Настройте opcache PHP и динамическую библиотеку mysql.
date.timezone = PRC
- Установить часовой пояс PHP
opcache.enable=1
- включить opcache
open_basedir = /usr/share/nginx/html;
- Установите каталог, к которому разрешен доступ PHP-скрипту (необходимо настроить в соответствии с реальной ситуацией)
php-fpm.conf — это файл конфигурации для службы процесса php-fpm Ниже приведены некоторые распространенные конфигурации.
error_log = /usr/local/php/logs/php-fpm.log
- Укажите путь к журналу ошибок
include=/usr/local/php7/etc/php-fpm.d/*.conf
- Импортируйте конфигурацию в файл www.conf (установлен по умолчанию)
Основная информация о конфигурации php-fpm.conf и www.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 = notice
- Уровни ошибок Доступные уровни: предупреждение (должно быть обработано немедленно), ошибка (состояние ошибки), предупреждение (состояние предупреждения), уведомление (обычно важная информация), отладка (информация об отладке) По умолчанию: уведомление.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
- Указывает, что если количество процессов php-cgi с ошибками SIGSEGV или SIGBUS в пределах значения, установленного Emergency_restart_interval, превышает Emergency_restart_threshold, php-fpm перезапустится корректно. Эти два параметра обычно сохраняют свои значения по умолчанию.
process_control_timeout = 0
- Устанавливает время ожидания для дочернего процесса для получения мультиплексированных сигналов от основного процесса Доступные единицы измерения: с (секунды), м (минуты), ч (часы) или д (дни) Единица по умолчанию: с (секунды) Значение по умолчанию : 0.
daemonize = yes
- Выполнение fpm в фоновом режиме, значение по умолчанию — да, если это для отладки, его можно изменить на нет. В FPM можно запускать несколько пулов процессов с разными настройками. Эти параметры можно задать индивидуально для каждого пула процессов.
listen = 127.0.0.1:9000
- Порт прослушивания, то есть адрес, обрабатываемый php в nginx, вообще значение по умолчанию. Доступные форматы: 'ip:port', 'port', '/path/to/unix/socket' Необходимо задать для каждого пула процессов.
listen.backlog = -1
- Количество отставаний, -1 означает неограниченное, определяется операционной системой, просто закомментируйте эту строку.
listen.allowed_clients = 127.0.0.1
- Разрешите доступ к IP-адресу процесса FastCGI, установите для любого неограниченный IP-адрес, если вы хотите настроить nginx других хостов для доступа к этому процессу FPM, прослушивайте локально доступный IP-адрес. Значение по умолчанию — любое. Каждый адрес разделяется запятыми. Если не задано или пусто, разрешен любой сервер, запрашивающий соединение.
listen.owner = www listen.group = www listen.mode = 0666
- Параметры настройки сокета Unix, если вы используете доступ по tcp, вы можете прокомментировать здесь.
user = www group = www
- Учетная запись и группа, которые запустили процесс
Метод оптимизации пула процессов php-fpm
pm = dynamic
- Для выделенных серверов pm можно установить как статический. Как управлять дочерним процессом, варианты статические и динамические. Если выбран статический, фиксированное количество дочерних процессов указывается в pm.max_children. Если выбран динамический, он определяется параметром открытия вниз:
pm.max_children
- Количество открытых процессов php-fpm в статическом режиме, в динамическом режиме он ограничивает максимальное количество процессов php-fpm (тут следует отметить, что значение pm.max_spare_servers может быть только меньше или равно pm. макс_дети)
pm.start_servers
- Количество запущенных процессов php-fpm в динамическом режиме.
pm.min_spare_servers
- Гарантируется минимальное количество простаивающих процессов.Если простаивающий процесс меньше этого значения, будет создан новый дочерний процесс
pm.max_spare_servers
- Гарантирует максимальное количество бездействующих процессов, если бездействующий процесс больше этого значения, это будет очищено.
- Если для dm задано значение static, действует только параметр pm.max_children. Система запустит процесс php-fpm с заданным количеством параметров. Процесс php-fpm будет занимать около 20-40 м памяти, поэтому настройка его цифрового размера должна быть установлена в соответствии с размером вашей физической памяти, и вы также должны обратить внимание на другое использование памяти, такое как базы данных, системные процессы и т. д., чтобы определить значения настройки вышеуказанных 4 параметров!
- Если для параметра dm установлено значение dynamic, вступают в силу все четыре параметра. Система запустит процессы pm.start_servers php-fpm при запуске операции php-fpm, а затем динамически изменит количество процессов php-fpm между pm.min_spare_servers и pm.max_spare_servers в соответствии с потребностями системы. Параметр требует, чтобы значение pm.start_servers находилось между pm.min_spare_servers и pm.max_spare_servers.
pm.max_requests = 1000
- Устанавливает количество запросов, которые необходимо обслужить перед возрождением каждого дочернего процесса.
- Максимальное количество обработанных запросов относится к тому, сколько запросов обрабатывает рабочий процесс php-fpm, прежде чем он завершится, и главный процесс перезапустит новый. Основная цель этой конфигурации — избежать утечек памяти, вызванных интерпретатором php или сторонними библиотеками, на которые ссылается программа.
- Полезно для сторонних модулей, которые могут иметь утечки памяти. Если установлено значение «0», запросы всегда принимаются. Эквивалентно переменной среды PHP_FCGI_MAX_REQUESTS. По умолчанию: 0.
pm.status_path = /status
- URL страницы статуса FPM. Если не задано, страница статуса недоступна. По умолчанию: нет. Мониторинг munin будет использовать
ping.path = /ping
- URL-адрес проверки связи для страницы мониторинга FPM. Если этот параметр не задан, доступ к странице проверки связи будет недоступен. Эта страница используется для внешнего определения того, активен ли FPM и может ли он отвечать на запросы. Обратите внимание, что она должна начинаться с косой черты (/) .
ping.response = pong
- Используется для определения возвращаемого ответа на запросы ping.Возвращает как текст HTTP 200/обычный форматированный текст.По умолчанию: pong.
request_terminate_timeout = 0
- Устанавливает время прерывания тайм-аута для одного запроса. Этот параметр может быть полезен для скриптов, у которых «max_execution_time» в настройках php.ini не прерывается по какой-либо особой причине. Установите «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 для ядра. Доступные значения: 'unlimited', 0 или положительное целое. Значение по умолчанию: значение, определенное системой.
chroot =
- Каталог chroot при запуске. Определенный каталог должен быть абсолютным путем. Если не задан, chroot не используется.
chdir =
- Установите каталог запуска, который будет автоматически называться каталогом Chdir при запуске. Определенный каталог должен быть абсолютным путем. Значение по умолчанию: текущий каталог или / каталог (при chroot)
catch_workers_output = yes
- Перенаправление запущенных stdout и stderr в основной файл журнала ошибок. Если не задано, stdout и stderr будут перенаправлены в /dev/null в соответствии с правилами FastCGI. По умолчанию: пусто.`
clear_env = no
- очистить окружающую среду
variables_order
Параметр Variables_order подробно объясняется в другой ссылке на статью:nuggets.capable/post/684490…
Распространенные ошибки и решения
Запрошенное время прерывания тайм-аута не установлено
- Если значение request_terminate_timeout установлено равным 0 или слишком большим, это может привести к тому, что PHP-скрипт продолжит выполнение. Таким образом, когда все процессы php-cgi застревают в функции file_get_contents(), веб-сервер Nginx+PHP больше не может обрабатывать новые запросы PHP, и Nginx возвращает пользователю «502 Bad Gateway». установить один Однако максимальное время выполнения PHP-скрипта необходимо для устранения симптомов, а не основной причины. Например, если он изменен на 30 с, если file_get_contents() медленно получает содержимое веб-страницы, это означает, что 150 процессов php-cgi могут обрабатывать только 5 запросов в секунду, и веб-серверу также трудно избежать «502 Bad». Шлюз". Решение состоит в том, чтобы установить request_terminate_timeout на 10 с или разумное значение или добавить параметр тайм-аута в file_get_contents!
Неправильная конфигурация параметра max_requests
-
Неправильная настройка параметра max_requests может привести к периодически возникающим ошибкам 502:
pm.max_requests = 1000
-
Устанавливает количество запросов, которые должны быть обработаны перед возрождением каждого дочернего процесса. Полезно для сторонних модулей, которые могут иметь утечки памяти. Если установлено значение «0», запросы всегда принимаются. Эквивалентно переменной среды PHP_FCGI_MAX_REQUESTS. По умолчанию: 0. Эта конфигурация означает, что когда количество запросов, обработанных процессом PHP-CGI, достигает 500, процесс автоматически перезапускается.
-
Но зачем перезапускать процесс?
-
Как правило, в проекте мы будем более или менее использовать некоторые сторонние библиотеки PHP.У этих сторонних библиотек часто возникают проблемы с утечкой памяти.Если процесс PHP-CGI перезапускается нерегулярно, использование памяти неизбежно увеличится. Поэтому PHP-FPM, как менеджер PHP-CGI, предоставляет такую функцию мониторинга для перезапуска процесса PHP-CGI, который запрашивает заданное количество раз, чтобы убедиться, что использование памяти не увеличивается.
Медленный журнал php-fpm, артефакт устранения неполадок отладки и исключений
- request_slowlog_timeout задает параметр тайм-аута, slowlog задает место хранения медленного лога, tail -f /var/log/www.slow.log может видеть процесс PHP, который выполняется слишком медленно. Вы можете увидеть частые проблемы, что сеть читает слишком много, а запрос Mysql слишком медленный.Если вы проверите проблему в соответствии с оперативной информацией, у вас будет четкое направление.