Heim  >  Artikel  >  Backend-Entwicklung  >  Lösen Sie das Problem der Speichererschöpfung, die durch zu viele PHP-FPM-Prozesse verursacht wird, im Beispiel Linux_php

Lösen Sie das Problem der Speichererschöpfung, die durch zu viele PHP-FPM-Prozesse verursacht wird, im Beispiel Linux_php

韦小宝
韦小宝Original
2017-12-04 13:10:021873Durchsuche

Dieser Artikel stellt hauptsächlich vor, wie man das Problem der Speichererschöpfung löst, die durch zu viele PHP-fpm-Prozesse unter Linux verursacht wird. Freunde, die PHP-fpm verstehen müssen, können sich hierauf beziehen Artikel zum Lernen. Lassen Sie uns darüber sprechen, wie Sie das Problem der Speichererschöpfung lösen können, die durch zu viele PHP-fpm-Prozesse verursacht wird.

Kürzlich habe ich festgestellt, dass der Linux-Server und der Datenbankdienst meines Blogs oft hängen blieben und vor dem normalen Zugriff einen Neustart erforderten. Das war äußerst widerlich, also beschloss ich, mit der Lösung des Problems zu beginnen und meine Zeit zu sparen Energieproblem (ich möchte nicht oft ausgehen) und dann manuell neu starten, was mühsam und zeitaufwändig ist.

Analysieren Sie das Problem

Nachdem Sie das Problem entdeckt haben, verwenden Sie zunächst den Befehl free -m, um den aktuellen Serverausführungsstatus anzuzeigen:

Sie können sehen, dass mein Serverspeicher 2G groß ist, aber derzeit sind nur noch 70 MB verfügbarer Speicher und die Speicherauslastung liegt bei bis zu 92 % Der Datenbankdienst hängt aufgrund der hohen Speicherauslastung auf.

Sehen Sie sich weiterhin die Details an, verwenden Sie den Befehl top:

Schauen Sie sich dann die in der Befehlsausgabe aufgeführten Prozessdetails an und konzentrieren Sie sich dabei auf den Punkt 10 Spaltenspeichernutzungsverhältnis:

Es wurde festgestellt, dass die CPU-Auslastung nicht hoch ist und das CPU-Problem ausgeschlossen ist. Darüber hinaus ist ersichtlich, dass die Datenbank Der Dienst belegt 15,2 % des Speichers und die Speicherauslastung. Wenn er zu hoch ist, wird der Datenbankprozess (der Prozess, der den meisten Speicher beansprucht) verdrängt, was dazu führt, dass der Dienst aufhängt. Daher müssen wir die Details überprüfen Speichernutzung. Welche Prozesse verbrauchen so viel Speicher?

Verwenden Sie den Befehl:


ps auxw|head -1;ps auxw|sort -rn -k4|head -40


Sehen Sie sich die 40 Prozesse an, die am meisten Speicher verbrauchen:

Bei Betrachtung des Speichernutzungsverhältnisses in der vierten Spalte haben wir festgestellt, dass zusätzlich zum MySQL-Datenbank-Dienst auch der PHP-FPM-Dienstpool zu viele untergeordnete Elemente geöffnet hat Prozesse, die mehr als die Hälfte des Speichers belegen. Wenn das Problem gefunden ist, beginnen wir mit der Lösung des Problems: Legen Sie die Anzahl der Prozesse fest, um den PHP-FPM-Prozesspool zu steuern.

Problem lösen

Durch verschiedene Suche wurde festgestellt, dass Sie das pm.max_children Attribut, steuern Sie die Anzahl der PHP-FPM-Unterprozesse. Öffnen Sie zunächst die PHP-FPM--Konfigurationsdatei und führen Sie den Befehl aus:


vi /etc/php-fpm.d/www.conf


Suchen Sie das Feld

und stellen Sie fest, dass sein Wert zu groß ist: pm.max_children

Wie in der Abbildung gezeigt , der

-Wert ist 50 und jeder Prozess belegt 1 % – 2,5 % des Speichers machen mehr als die Hälfte des Speichers aus, daher müssen wir den Wert hier auf 25 reduzieren Überprüfen Sie gleichzeitig die folgenden beiden Attribute: pm.max_children

: Der Wert gibt die garantierte maximale Anzahl von Leerlaufprozessen an. Wenn der Leerlaufprozess größer als dieser Wert ist, wird dieser bereinigt pm.max_spare_servers: Der Garantierte Mindestanzahl von Leerlaufprozessen unter diesem Wert, wird ein neuer untergeordneter Prozess erstellt pm.min_spare_servers

Keiner dieser beiden Werte kann größer sein als der

Wert. Der pm.max_children-Wert wird auf 60 %–80 % des pm.max_spare_servers-Werts festgelegt. pm.max_children

Zum Schluss php-fpm neu starten


systemctl restart php-fpm


Überprüfen Sie die Speichernutzung erneut, die Speichernutzung wird reduziert viel:

Nachdem wir die Speichernutzung viele Male beobachtet hatten, stellten wir fest, dass nach dieser Verbesserung der Verbrauch von Serverspeicherressourcen erheblich gesunken ist.

ps: Zeigt die Anzahl der von php-fpm geöffneten Prozesse und das Speicherlimit jedes Prozesses an

1 Prozesse, die über den Befehl auf dem Server geöffnet wurden. Wie viele PHP-CGI-Prozesse gibt es? Linux + Nginx + PHP-Umgebung, das Speicherlimit jedes PHP-FPM-Prozesses


Einstellungsmethode:

 ps -fe |grep "php-fpm"|grep "pool"|wc -l


Bearbeiten Sie die php-fpm.conf Konfigurationsdatei

php_admin_value[memory_limit] = 128M (die Konfigurationsdatei auf meinem Server befindet sich in /etc/php5/fpm/pool.d/www.conf. Diese Datei ist in php-fpm.conf enthalten) Die folgenden Zahlen können beliebig sein Ändern: 32M, 64M, 128M, 256M, 512M. Diese Einstellung kann entsprechend Ihrer Serverspeichergröße und Ihren Anforderungen geschrieben werden. Nach der Änderung müssen Sie den PHP-FPM-Dienst laden.

Zusammenfassung

Das Obige stellt Ihnen der Herausgeber vor, um das Problem der Speichererschöpfung zu lösen, die durch zu viele PHP-FPM-Prozesse verursacht wird Linux. Ich hoffe, es hilft allen.

Verwandte Empfehlungen:

So aktivieren Sie Statusstatistiken mit PHP-FPM

Teilen von Beispielcode, erklärt von php-fpm

Einführung von Lösungen zur Reduzierung der PHP-FPM-Speichernutzung

Das obige ist der detaillierte Inhalt vonLösen Sie das Problem der Speichererschöpfung, die durch zu viele PHP-FPM-Prozesse verursacht wird, im Beispiel Linux_php. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn