Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 = /статус
#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 според нуждите на системата

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

За сървъри с голяма памет (като 8G или повече) всъщност е по-подходящо да се специфицира статичен max_children, тъй като това не изисква допълнителен контрол на процесите и подобрява ефективността. Тъй като честото превключване на php-fpm процеси също ще забави времето, е по-добре да се включат статичните ефекти, когато паметта е достатъчно голяма. Сумата може да се получи и според памет/30M, например 8GB памет може да се настрои на 100, а паметта, консумирана от php-fpm, може да се контролира в 2G-3G. Ако паметта е малко по-малка, например 1G, тогава уточняването на броя на статичните процеси е по-благоприятно за стабилността на сървъра. Това гарантира, че php-fpm получава само достатъчно памет и разпределя малко количество памет към други приложения, което ще направи системата да работи по-гладко.

За сървър с малка памет, като VPS с 256M памет, дори ако се изчислява според 20M памет, 10 php-cgi процеса ще изразходват 200M памет, тогава системният срив би трябвало да е нормален. Затова трябва да се опитате да контролирате броя на 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 за отваряне на файлови дескриптори





Предишен:Анализ на провал при проверка на здравето на Alibaba Cloud SLB за балансиране на натоварването и HTTP
Следващ:Липсващи файлове за проверка на файлове в 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 - максималният брой деца в "iddle"
; Стандартна стойност: 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_requests = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP request_slowlog_timeout
; Забележка: slowlog е задължителен, ако request_slowlog_timeout е зададен
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep slowlog
; - 'slowlog'
; Забележка: slowlog е задължителен, ако request_slowlog_timeout е зададен
slowlog = /alidata/log/php/$pool.log.slow
; изхвърлен във файла 'slowlog'. Стойност "0s" означава "изключено".
; 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 conf] #
 Хазяин| Публикувано в 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 = 30s могат да се използват
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com