Server entlasten - wie?
Ralph
- webserver
0 Cheatah0 LX2 Sven Rautenberg
Hallo liebe Selfer!
Montag ist kein guter Tag für meinen Server :-( Eigentlich sind viele Besucher ja ein Grund zur Freude, aber nicht, wenn der Server auf Hochlast läuft.
Hier mal ein Screenshot von top, kurz danach ist der Server abgeraucht:
Jetzt ist die Frage: wo kann ich am besten angreifen, um das in den Griff zubekommen?
Bisher habe ich folgende Massnahmen in Betrieb:
Danke euch fuer weitere Anregungen,
Ralph
Hi,
Danke euch fuer weitere Anregungen,
binde http://httpd.apache.org/docs/2.2/mod/mod_status.html ein (einschließlich dem entsprechenden SetHandler) und beobachte, was sich dort tut. Damit lassen sich Flaschenhälse ganz gut finden.
Cheatah
Hallo!
- Caching, läuft allerdings so, dass PHP noch aufgerufen wird. Falls die Cache-Datei existiert erfolgt die Ausgabe mit passthru(). Nur falls sie nicht existiert, läuft das komplette Script samt DB-Zugriffen durch.
- teilweise habe ich JS-Dateien zusammengeführt und CSS-Sprites in Betrieb, um die Anzahl der HTTP-Requests zu drücken. Die Seite ist aber sehr bildlastig, darum kommt da schon ein bisschen Traffic zusammen.
Optimiere die statischen Dateien, wenn möglich. PNG-Bilder kann man bspw. mit optipng noch weiter packen. Evtl. ist es hilfreich, statische Dateien von einem anderen Server (bspw. mit lighttpd) auszuliefern.
Schütze Dich vor Denial of Service-Angriffen. Mehr als eine vernünftige Anzahl von Requests innerhalb einer Sekunde sollten zur vorübergehenden Verlangsamung und bei Widerholung Sperrung führen. Die vernünftige Anzahl ist dabei die maximale Anzahl an Requests zum Laden der gleichen Seite.
Gruß, LX
- wenn in dieser Hinsicht alles nichts hilft, auf eine schnellere Sprache [...] Lua umsteigen.
Ich kenn Lua hauptsächlich aus der Spieleentwicklung - hast du ein Beispiel für eine Website die mit Lua realisiert wurde?
Ich habe sowas mit akuter Regelmäßigkeit gemacht, bevor ich den Job neben Cheatah angenommen habe. Mein Zwillingsbruder hat in seinem Buch über Lighttpd ein recht umfassendes Kapitel zu Lua und CGI geschrieben. An den darin beschriebenen Scripten habe ich teilweise mitgewirkt.
Gruß, LX
Moin!
Jetzt ist die Frage: wo kann ich am besten angreifen, um das in den Griff zubekommen?
Finde heraus, wo das Problem liegt.
Zuerst solltest du dir mal die Logfiles angucken, die der Server schreibt. Analysiere, ob nach deinen Maßstäben hinsichtlich der reinkommenden Requests optimale Antworten gegeben werden, oder nicht. Was optimale Antworten sind, hängt natürlich vom Request ab, aber Fragen nach statischen Ressourcen sollten je Client nur einmal mit 200 und danach häufig mit 304 beantwortet werden.
Ebenfalls wäre zu beobachten, ob die Anzahl an Apache-Prozessen ausreichend dimensioniert ist, oder ob sie an das konfigurierte Maximum stößt. Dein Load ist zwar hoch, aber die Frage ist halt: Warum? Wirklich zu tun hat die CPU ja anscheinend nicht, ist nur 50% ausgelastet, trotzdem ist die Kiste gut ausgelastet - was verbrät da so viel Zeit?
Hinsichtlich der Optimierung wäre, sofern eine grobe Analyse z.B. der Festplatten- oder Datenbankzugriffe nichts auffälliges anzeigt, als nächster Schritt ein Profiling der PHP-Applikation angesagt.
- teilweise habe ich JS-Dateien zusammengeführt und CSS-Sprites in Betrieb, um die Anzahl der HTTP-Requests zu drücken. Die Seite ist aber sehr bildlastig, darum kommt da schon ein bisschen Traffic zusammen.
Dann wäre es ein Ansatzpunkt, die Bilder auf einen zweiten Server auszulagern, um so die Zahl der Requests aufzuteilen. Dieser Ansatz empfiehlt sich allerdings nur, wenn tatsächlich die Zahl der parallelen Requests auf dem Server das Problem ist, und sich auch nicht durch Hochsetzen der Apache-Prozesse mildern lässt.
- Sven Rautenberg