Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem, dass php-fpm aufgrund zu vieler Prozesse unter Linux nicht mehr über genügend Speicher verfügt

So lösen Sie das Problem, dass php-fpm aufgrund zu vieler Prozesse unter Linux nicht mehr über genügend Speicher verfügt

php中世界最好的语言
php中世界最好的语言Original
2017-12-20 14:11:521649Durchsuche

Ich habe festgestellt, dass im Linux-Dienst meines persönlichen Blogs der Datenbankdienst häufig nicht verfügbar ist und neu gestartet werden muss, bevor normal darauf zugegriffen werden kann. Daher werde ich Ihnen eine Lösung für dieses Problem anbieten.

Analysieren Sie das Problem

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


Sie können sehen, dass der Serverspeicher 2 GB groß ist, aber derzeit sind nur noch 70 MB verfügbarer Speicher und die Speicherauslastung beträgt bis zu 92 %. Es ist sehr wahrscheinlich, dass der Datenbankdienst aufgrund der hohen Speicherauslastung hängen bleibt.

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


Sehen Sie sich dann die in der Befehlsausgabe aufgeführten Prozessdetails an und konzentrieren Sie sich dabei auf die 10. Spalte Speichernutzungsverhältnis:


Es wurde festgestellt, dass die CPU-Auslastung nicht hoch ist und das CPU-Problem ausgeschlossen ist. Darüber hinaus ist ersichtlich, dass der Datenbankdienst belegt 15,2 % des Speichers, und eine zu hohe Speichernutzung führt dazu, dass der Datenbankprozess (der Prozess, der den meisten Speicher beansprucht) verdrängt wird, sodass der Dienst hängen bleibt. Daher müssen wir die detaillierte Speichernutzung überprüfen Prozesse verbrauchen so viel Speicher?

Verwenden Sie den Befehl:

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


Zeigen Sie die 40 Prozesse an, die am meisten Speicher verbrauchen:


Bei Betrachtung des Speichernutzungsverhältnisses in der vierten Spalte stellten wir fest, dass zusätzlich zum MySQL-Datenbank-Dienst der PHP-FPM-Dienstpool zu viele untergeordnete Prozesse öffnete und mehr als die Hälfte des Speichers belegte Das Problem wurde gefunden und wir haben mit der Lösung begonnen: Stellen Sie die Anzahl der PHP-FPM-Prozesspoolprozesse ein.

Lösen Sie das Problem

Durch verschiedene Suchmethoden habe ich herausgefunden, dass ich die Anzahl der untergeordneten PHP-FPM-Prozesse steuern kann, indem ich das Attribut pm.max_children konfiguriere . Ö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 „pm.max_children“ und suchen Sie dass sein Wert zu groß ist:


Wie in der Abbildung gezeigt, beträgt der Wert von pm.max_children 50 und jeder Prozess belegt 1 % bis 2,5 % des Speichers Da die Summe mehr als die Hälfte des Speichers ausmacht, müssen wir den Wert reduzieren. Der Blogger hier setzt ihn auf 25. Überprüfen Sie gleichzeitig die folgenden beiden Attribute:

pm.max_spare_servers: Dieser Wert zeigt an Die maximale Anzahl an Leerlaufprozessen ist garantiert. Wenn der Leerlaufprozess größer als dieser Wert ist, wird die Mindestanzahl an Leerlaufprozessen bereinigt. Wenn der Leerlaufprozess kleiner als dieser Wert ist, erstellen Sie einen neuen untergeordneten Prozess ;

Keiner dieser beiden Werte darf größer sein als der Wert von pm.max_children. Stellen Sie den Wert von pm.max_spare_servers normalerweise auf 60 % bis 80 % des Werts von .max_children ein.

Zum Schluss php-fpm neu starten

systemctl restart php-fpm


Überprüfen Sie die Speichernutzung erneut, die Speichernutzung ist stark reduziert:


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

ps: Überprüfen Sie die Anzahl der von php-fpm gestarteten Prozesse und das Speicherlimit jedes Prozesses

1 Verwenden Sie den Befehl, um zu überprüfen, wie viele php-cgi-Prozesse auf dem Server geöffnet sind

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


2. Überprüfen Sie, wie viele PHP-CGI-Prozesse zur Verarbeitung von TCP-Anfragen verwendet wurden

netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l


3.linux In +nginx+php-Umgebung das Speicherlimit jedes PHP-FPM-Prozesses

Einstellungsmethode:

Bearbeiten Sie die Konfigurationsdatei php-fpm.conf

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 nach Belieben geändert werden : 32M, 64M, 128M, 256M, 512M, diese Einstellung kann entsprechend der Speichergröße Ihres Servers und Ihren Anforderungen geschrieben werden. Nach der Änderung müssen Sie den PHP-FPM-Dienst laden.


Ich glaube, dass Sie die Methoden beherrschen, nachdem Sie diese Fälle gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

Detaillierte Erläuterung von Beispielen für die binäre Suche und die binäre Suche im Java-Algorithmus

Detaillierte Erläuterung der Binärdatei Suche in Javascript _Javascript-Kenntnisse

Javascript-Halbsuche nach Zeichenposition im Array (geordnete Liste)_Javascript-Kenntnisse

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass php-fpm aufgrund zu vieler Prozesse unter Linux nicht mehr über genügend Speicher verfügt. 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