Ich habe zwei Server, auf denen eine einzelne Magento-E-Commerce-Website mit mäßigem Datenverkehr gehostet wird (60.000 Seitenaufrufe pro Tag, die von Google Analytics gemeldet wurden, ich denke, etwa 80.000 wurden auf dem Server selbst gemeldet). Der Datenbankserver läuft reibungslos und schnell, abgesehen von einem seltenen gelegentlichen Schluckauf, aber der Apache-Server ist von Zeit zu Zeit umgefallen.
Ich habe magento so eingerichtet, dass es das empfohlene PHP-Caching (APC) verwendet und seine eigenen Cache-Dateien in einem 1,5-Gig-tmpfs enthält (dieses tmpfs wird regelmäßig ziemlich voll, und ich habe ein Skript zum Löschen von Cache-Dateien, wenn das tmpfs ist mehr als 80% voll). Ich bediene die meisten Bilder von Amazon Cloudfront. Ich habe kürzlich nginx als Reverse-Proxy für Apache eingerichtet (nginx dient auch den statischen Dateien). Ich habe Apache nach besten Kräften konfiguriert - Keepalives und Hostnamelookups sind deaktiviert, und die Prefork ist wie folgt konfiguriert:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Ich habe .htaccess-Dateien nicht deaktiviert und die Zugriffsprotokollierung ist aktiviert. Ich weiß, dass es einige Module gibt, die ich ausschalten kann. Ich bin mir nicht sicher, welche Auswirkungen diese drei Änderungen haben würden, wenn überhaupt.
Der Apache-Server ist ein VPS mit 6 Gig RAM. Zum Zeitpunkt des Schreibens meldet der Server load average: 17.77, 18.27, 49.76
, aber es sind ungefähr 2 Gig RAM frei. Wenn es wirklich schlecht wird, geht die Last auf 120+ und bleibt dort - ein Neustart von Apache bringt die Site wieder hoch und die Last wieder runter.
vmstat
ist (während der Server die Last oben meldet), denke ich, zeigt einen CPU-Leerlaufwert, der zwischen 0 und 70 oder so schwankt. iostat
zeigt einen iowait-Wert zwischen 0 und 0,2%.
Ich stecke ein bisschen fest. Das Wenige, das ich weiß, sagt mir, dass das Problem darin besteht, dass die CPU aufgrund der Kombination des ausgeführten Codes und der Anzahl der Benutzer überlastet ist. Aber ich bin nicht erfahren genug, um sicher zu sein, dass das das Problem ist. Wenn dies das Problem ist, besteht die Lösung meines Erachtens darin, entweder den Code zu verbessern oder das Site-Hosting mit einem Load Balancer auf zwei VPS aufzuteilen.
Ich denke also, meine Fragen sind:
- Was kann ich noch tun, um Probleme oder Engpässe auf dem Server zu finden?
- Gibt es offensichtliche Änderungen, die ich an der Serverkonfiguration vornehmen kann, um dies zu verbessern?
- Ist es eine gute Idee, ein automatisiertes System so einzustellen, dass Apache neu gestartet wird, wenn die Last ein bestimmtes Niveau überschreitet?
- Wie wahrscheinlich ist es, dass die Site dem Server entwachsen ist?
Bearbeiten:
Ich fand etwas Seltsames - / var / spool / mail / root war groß ... 38 Gig. Das klingt ... ungesund. Könnte das das Problem sein?