Настройка PHP-FPM: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ pm static для максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Настройка PHP-FPM: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ pm static для максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

НСотрСдактированная вСрсия ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±Ρ‹Π»Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π½Π° haydenjames.io ΠΈ публикуСтся здСсь с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΅Π΅ Π°Π²Ρ‚ΠΎΡ€Π°.

Π― Π² Π΄Π²ΡƒΡ… словах расскаТу, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ всСго Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ PHP-FPM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСссорныС рСсурсы ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ строка PM (process manager, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ процСссов) Π² PHP-FPM ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ dynamic, Π° Ссли Ρƒ вас Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ondemand. Π”Π°Π²Π°ΠΉΡ‚Π΅ сравним 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° управлСния Π½Π° основС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ php.net ΠΈ посмотрим, Ρ‡Π΅ΠΌ ΠΎΡ‚ Π½ΠΈΡ… отличаСтся ΠΌΠΎΠΉ Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ static pm для большого объСма Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°:

pm = dynamic β€” количСство Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов настраиваСтся динамичСски Π½Π° основС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = ondemand β€” процСссы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ динамичСского создания, ΠΊΠΎΠ³Π΄Π° pm.start_servers Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ запускС сСрвиса).
pm = static β€” количСство Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов фиксировано ΠΈ указываСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ pm.max_children.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ см. Π² ΠΏΠΎΠ»Π½ΠΎΠΌ спискС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² php-fpm.conf.

Бходства ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° процСсса PHP-FPM с рСгулятором частоты процСссора

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ„Ρ„Ρ‚ΠΎΠΏΠΎΠΌ, Π½ΠΎ я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ это с Ρ‚Π΅ΠΌΠΎΠΉ настройки PHP-FPM. Π£ ΠΊΠΎΠ³ΠΎ Ρ…ΠΎΡ‚ΡŒ Ρ€Π°Π· Π½Π΅ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΠ» процСссор β€” Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ частоты процСссора? Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, доступныС для nix ΠΈ Windows, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° систСмы, Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ рСгулятора процСссора с ondemand Π½Π° performance*. На этот Ρ€Π°Π· Π΄Π°Π²Π°ΠΉΡ‚Π΅ сравним описания ΠΈ посмотрим Π½Π° сходства:

Governor = ondemand β€” динамичСскоС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ частоты процСссора Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π Π΅Π·ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ частоту, Π° Π·Π°Ρ‚Π΅ΠΌ сниТаСт Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ простоя.
Governor = conservative = динамичСскоС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ частоты Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ частоту ΠΏΠ»Π°Π²Π½Π΅Π΅, Ρ‡Π΅ΠΌ ondemand.
Governor = performance β€” частота всСгда максимальная.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ см. Π² ΠΏΠΎΠ»Π½ΠΎΠΌ спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСгулятора частоты процСссора.

Π’ΠΈΠ΄ΠΈΡ‚Π΅ сходство? Π― Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ это сравнСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒ вас, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pm static для PHP-FPM.

Для рСгулятора процСссора ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ performance ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ бСзопасно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ Π»ΠΈΠΌΠΈΡ‚Π° процСссора сСрвСра. ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°, заряд аккумулятора (Π² Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты постоянной Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссора Π½Π° 100%. Настройка performance обСспСчиваСт ΡΠ°ΠΌΡƒΡŽ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ процСссора. ΠŸΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ force_turbo Π² Raspberry Pi, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ панСль RPi Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулятор performance, Π³Π΄Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½Π΅Π΅ ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΠΉ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частоты ЦП.

ИспользованиС pm static для достиТСния максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сСрвСра

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ PHP-FPM pm static Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ зависит ΠΎΡ‚ свободной памяти Π½Π° сСрвСрС. Если памяти ΠΌΠ°Π»ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ondemand ΠΈΠ»ΠΈ dynamic. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° процСсса PHP, установив pm static Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ сСрвСра. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ pm.static Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм процСссов PHP-FPM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π½Π΅ создавая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΎΠΉ памяти ΠΈΠ»ΠΈ кэша. Но Π½Π΅ Ρ‚Π°ΠΊ высоко, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ процСссоры ΠΈ Π½Π°ΠΊΠΎΠΏΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ PHP-FPM, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… выполнСния.

Настройка PHP-FPM: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ pm static для максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

На ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π²Ρ‹ΡˆΠ΅ Ρƒ сСрвСра установлСно pm = static ΠΈ pm.max_children = 100, ΠΈ это Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 10 Π“Π‘ ΠΈΠ· ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ 32. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ столбцы, Ρ‚ΡƒΡ‚ ΠΈ Ρ‚Π°ΠΊ всС понятно. На этом ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 200 Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (Π±ΠΎΠ»Π΅Π΅ 60 сСкунд) Π² Google Analytics. На этом ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 70% Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов PHP-FPM всС Π΅Ρ‰Π΅ Π±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ PHP-FPM всСгда установлСн Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм рСсурсов сСрвСра нСзависимо ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. ΠŸΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ процСсс ΠΆΠ΄Π΅Ρ‚ ΠΏΠΈΠΊΠΎΠ² Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ. Π’Π°ΠΌ Π½Π΅ приходится ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° pm создаст Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ процСссы, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° истСчСт ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ pm.process_idle_timeout. Π― установил ΠΎΡ‡Π΅Π½ΡŒ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для pm.max_requests, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ сСрвСр Π±Π΅Π· ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² PHP. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ pm.max_requests = 0 со static, Ссли ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… скриптах PHP. Но Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скрипты со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. УстановитС большоС число запросов, вСдь ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ pm. НапримСр, хотя Π±Ρ‹ pm.max_requests = 1000 β€” Π² зависимости ΠΎΡ‚ количСства pm.max_children ΠΈ числа запросов Π² сСкунду.

На ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Linux top, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎ u (user) ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ PHP-FPM. Показано Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 50 ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ Ρ‚ΠΎΠ³ΠΎ процСссов (Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ считал), Π½ΠΎ, ΠΏΠΎ сути, top ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠΏ статистики, которая помСщаСтся Π² ΠΎΠΊΠ½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Π’ этом случаС с сортировкой ΠΏΠΎ % ЦП (%CPU). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС 100 процСссов PHP-FPM, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

top -bn1 | grep php-fpm

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pm ondemand ΠΈ dynamic

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pm dynamic, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки:

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ошибка Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ дСнСтся, ΠΊΠ°ΠΊ описываСтся Π² этом постС Π½Π° Serverfault. Π’ этом случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ pm.min Π±Ρ‹Π»ΠΎ слишком малСньким, Π° Ρ€Π°Π· Π²Π΅Π±-Ρ‚Ρ€Π°Ρ„ΠΈΠΊ сильно мСняСтся ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ высокиС ΠΏΠΈΠΊΠΈ ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ спады, слоТно Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ pm dynamic. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ pm ondemand, ΠΊΠ°ΠΊ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽΡ‚ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ постС. Но это Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, вСдь ondemand Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ процСссы Π΄ΠΎ нуля, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠ°Π»ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΌΡƒΡ‡ΠΈΡ‚ΡŒΡΡ с ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Если, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ установили ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ врСмя оТидания. И Ρ‚ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠΆ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pm.static + высокоС число pm.max_requests.

PM dynamic ΠΈ особСнно ondemand ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Ссли Ρƒ вас нСсколько ΠΏΡƒΠ»ΠΎΠ² PHP-FPM. НапримСр, Π²Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ нСсколько Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² cPanel ΠΈΠ»ΠΈ нСсколько Π²Π΅Π±-сайтов Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡƒΠ»Π°Ρ…. Π£ мСня Π΅ΡΡ‚ΡŒ сСрвСр, Π³Π΄Π΅, допустим, 100+ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² cpanel ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 200 Π΄ΠΎΠΌΠ΅Π½ΠΎΠ², ΠΈ pm.static ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ dynamic мСня Π±Ρ‹ Π½Π΅ спас. Π’ΡƒΡ‚ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ondemand, вСдь большС Π΄Π²ΡƒΡ… Ρ‚Ρ€Π΅Ρ‚Π΅ΠΉ Π²Π΅Π±-сайтов ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΌΠ°Π»ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ, Π° с ondemand всС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ процСссы отвалятся, Ρ‡Ρ‚ΠΎ сэкономит Π½Π°ΠΌ ΡƒΠΉΠΌΡƒ памяти! К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ cPanel это Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΈ установили Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ondemand. РаньшС, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Ρ‹Π» dynamic, PHP-FPM Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ» для Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‰ΠΈΡ… сСрвСров. МногиС использовали suPHP, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ pm dynamic потрСблял ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡƒΠ»Π°Ρ… ΠΈ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°Ρ… cPanel PHP-FPM. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, ΠΏΡ€ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° сСрвСрС с большим числом ΠΏΡƒΠ»ΠΎΠ² PHP-FPM (ΠΎΠ±Ρ‰ΠΈΠΉ хостинг).

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ PHP-FPM ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Ρƒ вас ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ процСссов ondemand ΠΈ dynamic для PHP-FPM Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΈΠ·-Π·Π° присущих ΠΈΠΌ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠ΅ΠΊ. Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ свою систСму ΠΈ настройтС процСссы PHP-FPM Π² соотвСтствии с максимальной Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ сСрвСра. Π‘Π½Π°Ρ‡Π°Π»Π° Π·Π°Π΄Π°ΠΉΡ‚Π΅ pm.max_children Π² зависимости ΠΎΡ‚ максимального использования pm dynamic ΠΈΠ»ΠΈ ondemand, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ уровня, Π³Π΄Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ процСссор Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ с pm static, Ρ€Π°Π· Ρƒ вас всС хранится Π² памяти, ΠΏΠΈΠΊΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ мСньшС ΠΏΠΈΠΊΠΎΠ² для процСссора, Π° срСдниС значСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСра ΠΈ процСссора Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡŽΡ‚ΡΡ. Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ процСсса PHP-FPM зависит ΠΎΡ‚ Π²Π΅Π±-сСрвСра ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ настройки Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, поэтому Π±ΠΎΠ»Π΅Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ процСссов β€” dynamic ΠΈ ondemand β€” Π±ΠΎΠ»Π΅Π΅ популярны. НадСюсь, ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.

UPD Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° ab. Если процСссы PHP-FPM находятся Π² памяти, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ увСличиваСтся Π·Π° счСт потрСблСния памяти, Π³Π΄Π΅ ΠΎΠ½ΠΈ сидят ΠΈ ΠΆΠ΄ΡƒΡ‚. НайдитС для сСбя ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Настройка PHP-FPM: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ pm static для максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com