
Ich versuche herauszufinden, warum meine Apache-Prozesse so viel Speicher verbrauchen
Meine Slice-Spezifikationen (1,5 GB RAM, CentOS 5, Apache2, PHP 5.2, MySQL)
Wie Sie sehen, verbrauchen meine Top-Prozesse fast die Hälfte meines gesamten Speichers, und wenn weitere Prozesse gestartet werden, kommt der Server fast zum Stillstand, wechselt häufig in den Swap-Modus und stürzt ab.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
Hat jemand eine Ahnung, was die Ursache dafür sein könnte, dass Apache (und PHP) so viel Speicher verbrauchen?
total used free shared buffers cached
Mem: 1545 827 718 0 3 111
-/+ buffers/cache: 713 832
Swap: 3071 103 2968
Antwort1
Sie führen mit ziemlicher Sicherheit mod_php aus, was bedeutet, dass Sie mit ziemlicher Sicherheit Apache in mpm_prefork ausführen.
Wenn die Leistung im Allgemeinen in Ordnung ist, bis Sie aufgrund der Belastung mit dem Swapping beginnen, können Sie die MaxClients von Apache schnell drosseln. Wenn Apache Arbeitsprozesse nach Belieben aufteilen darf, beginnt es unter Belastung mit dem Swapping. Anfragen werden in die Warteschlange gestellt, bis ein Arbeitsprozess verfügbar ist. Es kann also langsam werden, aber nicht so langsam wie beim Death-by-Swap.
Wenn Sie die Dinge wirklich genauer abstimmen müssen, sollten Sie von prefork apache mpm abrücken. Das bedeutet, dass PHP als FastCGI ausgeführt wird. Wenn Sie PHP unter FastCGI verwenden möchten, sollten Sie ein Upgrade auf PHP 5.3.3 in Betracht ziehen, das einen viel besseren FastCGI-Prozessmanager hat (Konfigurationsoption --enable-fpm).
php-fpm/worker ist viel speichereffizienter als das altmodische mod_php. Sie können dann die Anzahl der Apache-Prozesse/Threads unabhängig von der Anzahl der PHP-Prozesse anpassen. Und Ihre speicherintensiven PHP-Prozesse werden nur zum Bereitstellen von PHP-gesteuerten Inhalten verwendet und nicht für das Bereitstellen statischer Dateien verschwendet.
Antwort2
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
Läuft auf Apache nur WordPress? Mich interessiert vor allem die sehr hohe CPU-Auslastung von PID 6765. Ich frage mich, was das macht. Was die Mem%s angeht, sieht das für eine Webanwendungskonfiguration ziemlich normal aus, da jeder Thread tatsächlich mehr als einen Worker ausführt.
Welches MPM verwenden Sie für Apache und wie haben Sie es konfiguriert?
Wenn Sie Terminaldumps posten, beginnen Sie bitte jede Zeile mit vier Leerzeichen. Dadurch bleibt die Formatierung erhalten.
Antwort3
Meine Kristallkugel ist ein bisschen verstaubt, aber ich schätze, du benutztzwischengespeichertund seine PHP-Erweiterung. Wenn das der Fall ist, versuchen Sie, es zu deaktivieren, es sei denn, Sie brauchen es wirklich.
Eine andere Möglichkeit ist, dass Sie eine Art Op-Code-Cache haben, wie zum BeispielXCache, installiert und so konfiguriert, dass viel Speicher genutzt wird.
Sie können versuchen
pmap -x `pidof apache`
um zu sehen, was den Speicher verbraucht.
Antwort4
Laden Sie keine nicht verwendeten Apache-Module (wie Python, Perl usw.).
Verwenden Sie das PHP-Modul eAccelerator. Es handelt sich um einen PHP-Compiler. Sie erhalten eine schnellere Ausführung und einen geringeren Speicherverbrauch.
Andere Benutzer haben möglicherweise auch recht.