So verhindern Sie, dass PHP-FPM zu viel RAM unter Linux verbraucht

So verhindern Sie, dass PHP-FPM zu viel RAM unter Linux verbraucht

Wenn Sie a bereitgestellt haben Lemp (Linux, Nginx, Mysql/Mariadb, Und Php) Stapel, dann verwenden Sie wahrscheinlich Fastcgi in sich stellend innen Nginx (als HTTP -Server) für die PHP -Verarbeitung. PHP-FPM (ein Akronym von FASTCGI -Prozessmanager) ist eine weit verbreitete und leistungsstarke Alternative PHP FASTCGI Implementierung.

Hier sind die nützlichen Anleitungen zum Einrichten Lemp Stack unter Linux.

  • So installieren Sie LEMP Stack mit Phpmyadmin in Ubuntu 20.04
  • So installieren Sie LEMP Server auf CentOS 8
  • So installieren Sie LEMP auf Debian 10 Server

Vor kurzem alle unsere Php Websites auf einem unserer Lemp Webserver wurden langsam und mussten schließlich auf die Anmeldung auf dem Server reagieren. Wir stellten fest, dass das System bei RAM nur wenig ausgeführt wurde: PHP-FPM hatte den größten Teil des RAM konsumiert, wie im folgenden Screenshot angegeben (Blinces - Systemüberwachungstool).

$ blicken 
Blicke - Systemüberwachungstool

In diesem Artikel werden wir zeigen, wie man verhindern PHP-FPM von zu viel konsumieren oder all Ihren Systemspeicher (RAM) in Linux. Am Ende dieses Leitfadens lernen Sie, wie man reduziert wird PHP-FPM Speicherverbrauch um 50% oder mehr.

Reduzieren Sie die Verwendung von PHP-FPM-Speicher

Nachdem wir einige Nachforschungen im Internet durchgeführt hatten, stellten wir fest, dass wir das neu konfigurieren mussten PHP-FPM Prozessmanager und bestimmte Aspekte davon, um den Speicherverbrauch von PHP-FPM in der Poolkonfigurationsdatei zu reduzieren.

Der Standardpool ist www und seine Konfigurationsdatei befindet sich bei /etc/php-fpm.D/www.Conf (An Centos/Rhel/Fedora) oder /etc/php/7.4/fpm/Pool.D/www.Conf (An Ubuntu/Debian/Mint).

$ sudo vim /etc /php-fpm.D/www.conf [auf CentOS/rhel/fedora] $ sudo vim/etc/php/7.4/fpm/Pool.D/www.Conf [über Ubuntu/Debian/Mint] 

Suchen Sie die folgenden Anweisungen und setzen Sie ihren Wert für Ihren Anwendungsfall ein. Für Richtlinien, die kommentiert werden, müssen Sie sie überzeugen.

PM = ONDEMAND PM.max_children = 80 pm.process_idle_timeout = 10s pm.max_requests = 200 

Lassen Sie uns kurz die oben genannten Richtlinien und ihre Werte erklären. Der PM Die Richtlinie bestimmt, wie der Prozessmanager die Anzahl der Kinderprozesse steuert. Die Standardmethode ist dynamisch, Was bedeutet PM.max_children Dies definiert die maximale Anzahl von Kindern, die gleichzeitig am Leben sein können.

Der idealste Prozessmanager ist der auf Anfrage Schema, bei dem beim Start keine Kinderprozesse erstellt werden, aber auf Bedarf hervorgebracht werden. Kinderprozesse werden nur gegabelt, wenn neue Anfragen basierend auf dem eine Verbindung herstellen werden PM.max_children Und PM.process_idle_timeout Dies definiert die Anzahl der Sekunden, nach denen ein Leerlaufprozess getötet wird.

Zu guter Letzt müssen wir die festlegen PM.max_requests Parameter, der die Anzahl der Anfragen definiert, die jeder untergeordnete Prozess vor dem Wiederaufbringen ausführen sollte. Beachten Sie, dass dieser Parameter auch als Problemumgehung für Speicherlecks in Bibliotheken von Drittanbietern verwendet werden kann.

Referenz: Eine bessere Möglichkeit, PHP-FPM auszuführen.

Nachdem ich diese obigen Konfigurationen gemacht hatte, bemerkte ich, dass RAM Die Verwendung ist jetzt auf unserem Server in Ordnung. Haben Sie irgendwelche Gedanken, die Sie zu diesem Thema oder zu diesem Thema teilen können? Erreichen Sie uns über das Feedback -Formular unten.