F: Warum belegt eine Apache.exe im Prozess Hunderte Megabyte Speicher und nimmt nicht ab, nachdem der Server viele Tage ununterbrochen in Betrieb war oder nach der Zugriffsspitze?
Antwort: Öffnen Sie apache2confhttpd.conf mit Notepad, suchen Sie nach MaxRequestsPerChild und ändern Sie MaxRequestsPerChild 0 in MaxRequestsPerChild 50.
Normalerweise sehen Sie zwei apache.exe-Prozesse im „Windows Task-Manager – Prozess“, einer ist der übergeordnete Prozess und der andere ist der untergeordnete Prozess. Nachdem der übergeordnete Prozess die Zugriffsanforderung erhalten hat, übergibt er die Anfrage um den untergeordneten Prozess zu behandeln. MaxRequestsPerChild Diese Direktive legt die Anzahl der Anfragen fest, die ein unabhängiger untergeordneter Prozess verarbeiten kann. Nach der Verarbeitung von „MaxRequestsPerChild-Anzahl“-Anfragen wird der untergeordnete Prozess vom übergeordneten Prozess beendet. Zu diesem Zeitpunkt wird der vom untergeordneten Prozess belegte Speicher freigegeben. Wenn eine weitere Zugriffsanforderung vorliegt, wird der untergeordnete Prozess erneut erstellt Prozess zur Verarbeitung.
Wenn MaxRequestsPerChild standardmäßig auf 0 (unendlich) oder eine größere Zahl (z. B. mehr als 10.000) eingestellt ist, kann jeder untergeordnete Prozess mehr Anforderungen verarbeiten und die Zugriffseffizienz wird durch die kontinuierliche Beendigung und den Start des untergeordneten Prozesses nicht verringert Wenn die MaxRequestsPerChild-Einstellung jedoch 0 ist und 200 bis 300 MB Speicher belegt sind, wird der belegte Speicher auch dann nicht reduziert, wenn die Last reduziert wird. Server mit größerem Speicher können auf 0 oder eine größere Zahl eingestellt werden. Server mit kleinerem Speicher möchten ihn möglicherweise auf 30, 50, 100 einstellen, um einen Speicherüberlauf zu verhindern
========================= === ========================================
Apache-Speicher Nutzung
Der Apache-Prozess „wächst“ bei der Speichernutzung. Mit anderen Worten: Bis der Prozess abstürzt, nimmt die Menge des verwendeten Speichers weiter zu, ohne abzunehmen. In diesem Fall hängt die vom Apache-Prozess verwendete Speichermenge von der maximalen Speichermenge ab, die von Ihrer Anwendung verwendet wird.
Keepalive-Parameter
KeepAliveTimeout Dieser Parameter bestimmt, wie lange ein http-Prozess warten kann, bevor er nichts tut? Stellen Sie sich vor, dass der von Apache belegte Speicher sehr schnell zunimmt, wenn Keepalive aktiviert ist und Keepalivetimeout auf eine relativ große Zahl eingestellt ist. Dies liegt daran, dass ein Apache-Prozess, nachdem er eine Aufgabe abgeschlossen hat (und eine bestimmte Speichernutzung erreicht hat, denken Sie an den „progressiven“ Modus), nicht sofort beendet wird, sondern auf eine Keepalive-Zeitüberschreitung wartet. Unter der Annahme, dass weiterhin Benutzerverbindungsanfragen eingehen, werden sich viele nutzlose Apache-Prozesse ansammeln, und diese Prozesse werden erst nach einer Zeitüberschreitung beendet.
Keepalive ist jedoch tatsächlich sehr effektiv für die Übertragung statischer Dateien, wie z. B. Bilddateien. Daher sollte Keepalive aktiviert sein, aber keepalvietimeout sollte kleiner eingestellt werden, z. B. 5s
MaxRequestsPerChild
Dieser Parameter bedeutet, dass der Apache-Prozess nach der Anzahl der verarbeiteten Anforderungen beendet und erneut gestartet werden muss, um Speicherprobleme während der Verarbeitung zu vermeiden.
Für PHP-Skripte ist es vorteilhaft, diesen Parameter kleiner einzustellen, um den Druck auf Apache zu vermeiden, der durch das kontinuierliche Wachstum des vom Programm verwendeten Speichers verursacht wird: Lassen Sie diesen Parameter regelmäßig Speicher freigeben, da PHP in Nach dem Skript ist ausgeführt wird, werden die einzigen verwendeten Ressourcen (Speicher) automatisch freigegeben.
Zum Beispiel auf 50 setzen? Wenn es zu klein ist, verbraucht die Neugenerierung eines Apache-Prozesses auch Ressourcen. Dies ist ein Gleichgewichtsproblem.
Das Obige ist der Inhalt der Apache-Speicherfreigabe ~ Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!