Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 11218|Відповідь: 4

Конфігурація та налаштування параметрів PHP-FPM

[Копіювати посилання]
Опубліковано 26.07.2017 09: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-адресу, до якої можна отримати доступ за рахунок прослуховування. За замовчуванням значення — будь-що. Кожна адреса розділена комою. Якщо він не встановлений або порожній, будь-який сервер має право запитувати з'єднання

Listen.owner = 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 = /статус
#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_spare_servers = 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 відповідно до потреб системи

Отже, який метод PM краще обрати для нашого сервера? Насправді, як і 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 — максимальна кількість дітей у режимі «idle»
; Значення за замовчуванням: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_запасні_сервери = 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 = 10s

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

Mail To:help@itsvse.com