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