Wir haben eine Site mit mäßigem Datenverkehr (ungefähr 20.000 Zugriffe pro Tag), auf der eine PHP / MySQL-App auf Apache 2.2, Ubuntu 9.10 Server, von einer Amazon EC2 c1.small-Instanz (1,7 GB RAM) ausgeführt wird.
Wir hatten Probleme mit der Website, die wiederholt nicht mehr reagierten. Als schmutzigen Hack habe ich MaxClients / ServerLimit auf 450 gesetzt.
<IfModule mpm_prefork_module>
KeepAlive On
KeepAliveTimeout 7
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 450
ServerLimit 450
MaxRequestsPerChild 0
</IfModule>
Die Seite scheint länger zu dauern als zuvor, stirbt aber immer noch. Ich überprüfe die Liste der Prozesse, die ich habe (dritte Spalte ist physisches Mem, vierte Spalte ist virtuelle Größe):
xxxxxxxxx@domU-XXXXXXXXX:/etc/apache2$ ps -eo pid,user,rss,vsz,args | grep apache
2333 root 11092 39084 /usr/sbin/apache2 -k start
3704 www-data 11060 41292 /usr/sbin/apache2 -k start
3826 www-data 10016 39844 /usr/sbin/apache2 -k start
3954 www-data 11976 41612 /usr/sbin/apache2 -k start
4061 www-data 11844 41668 /usr/sbin/apache2 -k start
4064 www-data 10988 40676 /usr/sbin/apache2 -k start
4084 www-data 11804 41428 /usr/sbin/apache2 -k start
4086 www-data 10192 39828 /usr/sbin/apache2 -k start
4099 www-data 11876 41748 /usr/sbin/apache2 -k start
4100 www-data 10980 40668 /usr/sbin/apache2 -k start
4102 www-data 8952 39724 /usr/sbin/apache2 -k start
4107 www-data 11856 41860 /usr/sbin/apache2 -k start
4108 www-data 9952 39604 /usr/sbin/apache2 -k start
4109 www-data 0 0 [apache2] <defunct>
4114 www-data 7172 39724 /usr/sbin/apache2 -k start
4115 www-data 10968 40668 /usr/sbin/apache2 -k start
4122 www-data 11888 41844 /usr/sbin/apache2 -k start
4123 www-data 11584 41444 /usr/sbin/apache2 -k start
4124 www-data 7036 39596 /usr/sbin/apache2 -k start
4125 www-data 6744 39084 /usr/sbin/apache2 -k start
4126 www-data 9532 39552 /usr/sbin/apache2 -k start
4127 www-data 10112 39812 /usr/sbin/apache2 -k start
4128 www-data 6600 39084 /usr/sbin/apache2 -k start
4129 www-data 6736 39084 /usr/sbin/apache2 -k start
4130 www-data 7004 39596 /usr/sbin/apache2 -k start
4131 www-data 6740 39084 /usr/sbin/apache2 -k start
4132 www-data 11616 41596 /usr/sbin/apache2 -k start
4134 www-data 7024 39588 /usr/sbin/apache2 -k start
4135 www-data 11808 41516 /usr/sbin/apache2 -k start
4136 www-data 7008 39460 /usr/sbin/apache2 -k start
4137 www-data 6988 39460 /usr/sbin/apache2 -k start
4139 1003 796 3040 grep --color=auto apache
victorhooi@domU-12-31-39-02-B6-34:/etc/apache2$
Gibt es eine einfache Möglichkeit herauszufinden, was genau los ist? Mein Verständnis von Apaches Innereien ist nicht so gut, aber ich hätte gedacht, dass wir nicht so viele gleichzeitige Prozesse benötigen würden, um eine Seite wie diese mit dieser Art von Verkehr zu versorgen. Wir haben die App geerbt, daher wissen wir nicht viel über ihre Innenseiten, aber es ist eine ziemlich einfache CMS-Site, die einige Suchergebnisse zeigt. Ich hätte nicht gedacht, dass sie diese Art von Grunzen brauchen würde.
Ich bin gegen die Site gelaufen, ich hatte eine ziemlich schlechte Anfragerate (weit unter 50 pro Sekunde), aber das war möglicherweise meine schlechte Wahl der Einstellungen - viele dieser Anfragen schienen fehlzuschlagen.
Wo sollte ich nach Informationen über das Geschehen oder nach Tipps zur Fehlerbehebung suchen, die ich versuchen könnte?
Prost, Victor
quelle
Antworten:
450 Kinder mit einem RSS von jeweils ca. 10 MB haben mehr als 4 GB Speicherplatz. Mehr als genug, um Ihre c1.small-Instanz auszutauschen. Swapping ist für Apache-Server fast immer eine Abwärtsspirale.
Ich würde sagen, die nächsten Dinge, die ich überprüfen möchte, sind
: Erwähnt das Apache-Fehlerprotokoll
das Erreichen von maxclients ? Erwähnt dmesg oder / var / log / messages überhaupt den OOM-Killer? Ist
der Server-Austausch ? Ist
die Speichernutzung ? Wachstum langsam und stetig oder stachelig / schnell einsetzend
Die ersten beiden betrachten nur txt-Dateien. Das dritte können Sie cli machen, aber Diagramme helfen, und das vierte benötigen Sie Diagramme. Richten Sie den mod_status von apache ein (wahrscheinlich schon da, kommentieren Sie ihn einfach aus) und zeigen Sie mit munin / collectd / cacti darauf.
Wenn Sie bestätigen, dass die Ursache Speichererschöpfung und Austausch ist, können Sie von dort aus Tonnen tun. Zunächst einmal können Sie Ihre maxclients auf etwa 150 senken. Dadurch bleibt Platz für andere Dinge und den Dateisystem-Cache (MySQL hier? Wenn ja, lassen Sie mehr). RSS ist eine grobe Metrik, um so zu extrapolieren. Es ist einfach alles, was wir haben. Sobald Sie dies eingestellt haben, sehen Sie sich die Grafiken im Laufe der Zeit an und prüfen Sie, ob Sie Platz haben, um nach oben oder unten zu gehen. Von dort aus können Sie sich auf 1.) dünnere Apache-Kinder konzentrieren (weniger Module, straffen Sie die PHP-Konfiguration) 2.) Apache weniger tun lassen (Mischung aus CDN, alternativen http-Servern und http-Proxy-Optionen) 3.) upgrayyed $$$
quelle
Möglicherweise sind dauerhafte Verbindungen zu Ihrem Server mit einer langen Zeitüberschreitung geöffnet. Wenn weitere Clients weiterhin eine Verbindung herstellen, übernehmen sie immer mehr Apache-Prozesse. Bei dauerhaften Verbindungen kann jeder Client 1 (oder mehrere) Verbindungen zu Ihrem Server herstellen.
Weitere Informationen finden Sie hier: http://httpd.apache.org/docs/1.3/misc/perf-tuning.html
quelle
Ich habe kürzlich eine Reihe von Tipps zur Leistungsoptimierung in http://www.anchor.com.au/hosting/dedicated/improving-server-capacity for work zusammengefasst. Es hat ziemlich gut für die Maschinen funktioniert, auf denen ich es kürzlich angewendet habe. Darüber hinaus habe ich einen ausführlicheren Artikel unter http://www.anchor.com.au/hosting/development/HuntingThePerformanceWumpus, der sich mit einem umfassenderen Problem der Maschinenleistung befasst, das möglicherweise nicht spezifisch für Apache ist Identifizieren, welche Komponente des Systems Probleme verursacht.
quelle
Sie können auch versuchen, Apache anzuweisen, mit 50 Prozessen (StartServers 50) zu starten, damit beim Start nicht die gesamte Servererweiterungsroutine durchlaufen werden muss. Versuchen Sie auch, Ihre Max-Ersatzserver auf etwa 20 zu erhöhen, damit Threads ausgeführt werden Sterben Sie nicht ab, wenn Ihre Anfragen in Wellen kommen.
quelle