Wéi verhënnert Dir PHP-FPM ze vill RAM an Linux ze verbrauchen


Wann Dir e LEMP (Linux, NGINX, MySQL/MariaDB, a PHP) Stack ofgesat hutt, da benotzt Dir wahrscheinlech FastCGI Proxying bannent NGINX (als HTTP Server), fir PHP Veraarbechtung. PHP-FPM (en Akronym vum FastCGI Process Manager) ass eng wäit benotzt an héich performant Alternativ PHP FastCGI Implementatioun.

Hei sinn déi nëtzlech Guiden fir LEMP Stack op Linux opzestellen.

  • Wéi installéiert ech LEMP Stack mat PhpMyAdmin an Ubuntu 20.04
  • Wéi installéiere ech LEMP Server op CentOS 8
  • Wéi installéiere ech LEMP op Debian 10 Server

Viru kuerzem sinn all eis PHP Websäiten op engem vun eise LEMP Webserver lues a schlussendlech opgehalen ze reagéieren beim Umelden op de Server. mir entdeckt, datt de System niddereg op RAM war Lafen: PHP-FPM huet de gréissten Deel vun der RAM verbraucht, wéi am folgende Screenshot uginn (Bléck - System Iwwerwachung Outil).

$ glances

An dësem Artikel wäerte mir weisen wéi Dir PHP-FPM verhënnert datt Dir zevill oder all Äre Systemspeicher (RAM) am Linux verbraucht. Um Enn vun dësem Guide léiert Dir wéi Dir de PHP-FPM Erënnerungsverbrauch ëm 50% oder méi reduzéiere kënnt.

Reduzéieren PHP-FPM Erënnerung Notzung

Nodeems mir e puer Recherchen um Internet gemaach hunn, hu mir entdeckt datt mir de PHP-FPM Prozessmanager a bestëmmten Aspekter dovunner nei konfiguréieren musse fir de PHP-FPM Erënnerungsverbrauch an der Poolkonfiguratiounsdatei ze reduzéieren.

De Standardpool ass www a seng Konfiguratiounsdatei ass op /etc/php-fpm.d/www.conf (op CentOS/RHEL/Fedora) oder /etc/php/7.4/fpm/pool.d/www.conf ( op Ubuntu/Debian/Mint).

$ sudo vim /etc/php-fpm.d/www.conf             [On CentOS/RHEL/Fedora]
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf    [On Ubuntu/Debian/Mint]

Fannt déi folgend Direktiven a setzt hire Wäert fir Äre Gebrauchsfall ze passen. Fir Direktiven déi kommentéiert sinn, musst Dir se decommentéieren.

pm = ondemand
pm.max_children = 80
pm.process_idle_timeout = 10s
pm.max_requests = 200

Loosst eis déi uewe genannten Direktiven an hir Wäerter kuerz erklären. D'PM-Direktiv bestëmmt wéi de Prozessmanager d'Zuel vun de Kannerprozesser kontrolléiert. D'Standardmethod ass dynamesch, dat heescht datt d'Zuel vun de Kanner (Kandprozesser) dynamesch gesat gëtt ofhängeg vun e puer aner Direktiven, dorënner pm.max_children, déi déi maximal Unzuel u Kanner definéiert déi zur selwechter Zäit lieweg kënne sinn.

Den idealste Prozessmanager ass den Ondemand Schema wou keng Kannerprozesser beim Start erstallt ginn, awer op Ufro gespaut ginn. Kand Prozesser sinn nëmmen forked wann nei Ufroe wäert konnektéieren baséiert op der pm.max_children an pm.process_idle_timeout déi d'Zuel vun Sekonnen definéiert no deem en Idle Prozess ëmbruecht gëtt.

Lescht awer net zulescht, musse mir de Parameter pm.max_requests setzen, deen d'Zuel vun den Ufroen definéiert, déi all Kandprozess soll ausféieren ier se nei spawnéieren. Bedenkt datt dëse Parameter och als Léisung fir Erënnerungslecks an Drëtt Partei Bibliothéiken benotzt ka ginn.

Referenz: E bessere Wee fir PHP-FPM ze lafen.

Nodeems ech dës uewe genannte Konfiguratiounen gemaach hunn, hunn ech gemierkt datt d'RAM Notzung elo gutt op eisem Server ass. Hutt Dir Gedanken ze deelen am Zesummenhang mat dësem Thema oder Froen? Erreeche eis iwwer de Feedback Form hei drënner.