GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie untersucht man ein Speicherleck mit Apache und PHP?

Lösung 1:

Wir wissen, dass das Speicherproblem von Apache/PHP kommt, denn immer wenn wir ein /etc/init.d/httpd reload ausgeben, sinkt die Speichernutzung

Nein - das bedeutet nur, dass es mit dem Webverkehr zusammenhängt. Sie haben weiter erwähnt, dass Sie mysql auf der Box ausführen - vermutlich um Daten für den Webserver zu verwalten - es könnte hier genauso gut der Übeltäter sein. Ebenso wie andere Dienste, die Ihr Webstack verwendet und die Sie nicht erwähnt haben.

Jedem Apache-Thread wird ein PHP-Speicherlimit von 512 MB zugewiesen, was

erklärt

Nein tut es nicht. Sie melden durchschnittlich 7 und maximal 25 ausgelastete Server – doch Ihr Arbeitsspeicherdiagramm zeigt ein Delta von etwa 25 GB.

Sie sollten wirklich wieder mit dem grundlegenden HTTP-Tuning beginnen - Sie scheinen konstant 256 httpds zu verwenden, aber Ihre Spitzennutzung beträgt 25 - das ist einfach nur dumm.

und eine max_execution_time von 120 Sekunden, die Threads beenden sollte, deren Ausführung länger dauert

Nein - nur wenn der Ausführungs-Thread innerhalb des PHP-Interpreters liegt - nicht wenn PHP blockiert ist.

das Financial Modeling durchführt

(seufz)

Es wäre hilfreich gewesen, wenn Sie Details darüber angegeben hätten, wie Sie Apache konfiguriert haben, Threaded oder Prefork, welche Version, wie PHP aufgerufen wird (Modul, cgi, fastcgi), ob Sie dauerhafte Verbindungen verwenden, ob Sie gespeicherte Prozeduren verwenden.

Ich würde vorschlagen, dass Sie damit beginnen, mysql auf einen separaten Computer zu verschieben und keine dauerhaften Verbindungen mehr zu verwenden (falls Sie sie derzeit verwenden). Stellen Sie das Speicherlimit auf viel ein senken und dies pro Skript überschreiben. Stellen Sie sicher, dass der Circular Reference Garbage Collector installiert und konfiguriert ist.

Lösung 2:

Wahrscheinlich hast du dein Problem inzwischen gelöst. Als Übergangszeit, um den Server vor dem Swapping / Thrash zu bewahren, führe ich stündlich den folgenden Befehl von cron aus:

#!/bin/sh 
sync; echo 3 > /proc/sys/vm/drop_caches

Ich sage nicht, dass dies eine Lösung ist, sondern nur eine Möglichkeit, die Dinge am Laufen zu halten und Ausfallzeiten zu minimieren, während Sie die tatsächliche Ursache des Speicherlecks untersuchen.

Weitere Einzelheiten finden Sie hier.

http://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/


Linux
  1. So aktivieren und deaktivieren Sie das PHP-Curl-Modul mit Apache unter Ubuntu Linux

  2. So finden Sie MySQL-, PHP- und Apache-Konfigurationsdateien

  3. So schützen Sie Apache und SSH mit Fail2Ban unter CentOS 8

  4. Installieren Sie Apache und PHP unter CentOS 7

  5. So installieren Sie PHP-FPM mit Apache unter Ubuntu 20.04

So installieren Sie Apache mit PHP-FPM unter Debian 10

So installieren Sie Apache und PHP unter OpenSUSE 15.1

So installieren Sie LAMP unter Ubuntu 15.10 (Linux, Apache, MySQL und PHP)

So installieren Sie den OpenLiteSpeed-Webserver mit MariaDB und PHP

So installieren und konfigurieren Sie Apache und PHP auf Jelastic Cloud

So installieren und konfigurieren Sie Memcached mit Apache und PHP