Probleme mit der Speichernutzung httpd
( Apache/2.2.29
).
Mit der Zeit steigt die Speichernutzung in den httpd
Prozessen, bis sie schließlich bei 100% liegt.
Das letzte Mal, dass ich neu gestartet habe, httpd
war vor ungefähr 24 Stunden. Ausgabe von free -m
ist:
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 1415 239 0 202 424
-/+ buffers/cache: 788 866
Swap: 1023 4 1019
Um zu beweisen, dass es definitiv so ist httpd
, habe ich neu gestartet httpd
und bin free -m
erneut gelaufen :
[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 760 894 0 202 360
-/+ buffers/cache: 197 1457
Swap: 1023 4 1019
Ein Neustart von Apache benötigt also freien Speicher von 239 MB bis 894 MB - was wie ein großer Sprung erscheint.
Ich habe durch die Liste gegangen von derzeit Apache - Module aktiviert ist (es gibt eine ganze Menge) und deaktiviert / entfernt mod_wsgi
und mod_perl
(von denen keiner für diesen Server erforderlich, die eine PHP-basierte Web - Anwendung läuft - Magento, speziell).
Basierend auf https://servercheck.in/blog/3-small-tweaks-make-apache-fly habe ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
ich die folgende Ausgabe ausgeführt und erhalten:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
15.1328 MB
118.09 MB
127.449 MB
129.059 MB
117.734 MB
113.824 MB
125.062 MB
123.922 MB
119.855 MB
108.066 MB
136.23 MB
114.031 MB
113.27 MB
110.695 MB
102.113 MB
113.234 MB
186.816 MB
118.602 MB
0.835938 MB
Wenn Sie das andere vorgeschlagene Diagnosetool ausführen MaxClients
, wird ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Folgendes zurückgegeben:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Dieser Server (Amazon AWS- m1.small
Instanz) verfügt 1.7 Gb
über RAM. Also deshalb:
Haben Sie weitere Hinweise / Vorschläge, wie Sie die httpd
Einstellungen am besten optimieren oder wie Sie diagnostizieren können, was genau die Ursache dafür sein könnte?
quelle
-/+ buffers/cache
Zeile ansehen müssen, um die Speichernutzung nach Prozessen zu überprüfen . In diesem Fall ist die Änderung jedoch vergleichbar. Abhängig davon, wie Apache optimiert wurde, kann es mit ein paar Prozessen beginnen, die für die Bearbeitung von Anforderungen bereit sind. Nach einer Zeit von vielen gleichzeitigen Anforderungen werden wahrscheinlich mehr Prozesse für die Verarbeitung der Last bereitgestellt. Die Anzahl der Leerlaufprozesse kann ebenfalls eingestellt werden. Wenn Apache also zu viel Speicher benötigt, müssen Sie einige Anpassungen vornehmen.nginx
, vielleicht ist es an der Zeit, es zu versuchen, aber ehrlich gesagt, ich benutze Apache seit Jahren und hatte nie größere Probleme. Magento kaut wirklich Speicher.grep httpd
Prozesses enthält (zumindest für mich). Um das zu beheben, würde ich empfehlen, diese Zeile von der Berechnung wieps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Antworten:
Folgendes habe ich getan, um das Problem zu lösen:
MaxClients 7
(basierend auf(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)Deshalb:
Deaktivieren Sie alle Apache - Module mit Ausnahme
authz_host_module
,log_config_module
,expires_module
,deflate_module
,setenvif_module
,mime_module
,autoindex_module
,negotiation_module
,dir_module
,alias_module
,rewrite_module
,php5_module
Entfernen Sie das
mod_ssl
Paket, da der Client überhaupt nichts verwendethttps://
.Ich melde mich zurück, sobald diese neue Konfiguration eine Weile ausgeführt wurde, um zu sehen, ob dies das Problem löst.
Einige Inspirationen hier wurden entlehnt von: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ und http://www.activoinc.com/ downloads / httpd.conf-magento
quelle
httpd
scheinen die Probleme mit dem Speicherverlust vollständig verschwunden zu sein.Ich fürchte Option MaxRequestsPerChild hat in Ihrem Fall geholfen, da sie das Prozessrecycling nach einer festgelegten Anzahl von Anforderungen ermöglicht, sodass ein Speicherverlust vorhanden, aber nicht mehr sichtbar ist.
Zusätzlich: MaxClients = ServerLimit * ThreadsPerChild
In Ihrem Fall, wenn Sie nur 7 gleichzeitige Benutzer benötigen (MaxClients = 7), ist es völlig ausreichend, zwei Prozesse auszuführen (nur für den Fall, dass eine Ausfallzeit nicht minimiert werden kann).
Ich benutze MaxClients 8 , um die Anforderungsverteilung zwischen zwei Prozessen zu verbessern .
quelle