Moin!
Moin, vor kurzem sind wir bei 1&1 auf einen neuen Managed Server umgezogen. Vorher hatten wir eine 4-Kern-CPU, 8 GB Speicher und 500 GB Festplatte. Jetzt haben wir 2x8-Kern-CPU, 32 GB Speicher und 2 TB Festplatte.
Vor dem Umzug hatten wir häufige Server-Ausfälle (vor allem die MYSQL-Datenbank ist immer abgeschmiert), was man an der Server-Statistik auch immer fast vorhersagen konnte.
Unsere Server-Statistik zeigt Diagramme zum LOAD, CPU-Usage, Memory, SWAP und Disk I/O. Gibt es eine Internetseite, die erklärt, welche Werte gut und welche schlecht sind? Ich hab bisher keine zufriedenstellende gefunden.
Zurück zum Thema: Der LOAD des alten Servers war ständig über 2 (soweit ich weiß, bedeutet ein LOAD von 2, dass 2 Prozesse (welcher das auch imm er sein mögen) auf ihre Ausführung warten), die CPU-Usage bei über 50% und die SWAP-Datei locker bei 300 MB. Jetzt nach dem Umzug gähnt die CPU vor sich hin (max < 4%), die SWAP-Datei ist 0 MB groß und der durchschnittliche LOAD liegt bei 0.4, kratzt aber auch abends (wenn viel los ist) immer wieder an der 1er-Marke, in der Spitze sogar 1,7.
Möglich, dass ihr einen oder zwei ständig laufende Prozesse hattet, eventuell durch einen Einbrecher verursacht.
Load von 2 auf einer CPU mit vier Kernen entspricht 50% Auslastung.
Load von 0.4 auf einer 16-Kern-Maschine entspricht einem Load von 0.1 auf der Vier-Kern-Maschine, Load von 1.7 auf 16 Kernen einem Load von 0.425 auf den 4 Kernen - rein von der Auslastung her betrachtet, bzw. der Luft nach oben.
Meine Frage ist nun: Was für Leistung nimmt dieses LOAD eigentlich in Anspruch? Bei 1&1 hatte man uns gesagt, es wäre vor allem der Hauptspeicher entscheidend, um das weiter auffangen zu können. Nun ist ja auch die Belastung recht weit zurückgegangen. Aber heißt das wirklich, dass eine weitere Vergrößerung - immerhin mit erheblichen Kosten verbunden und mit einem weiteren Upgrade - wirklich noch mehr Milderung bringt? Oder gibt es vielleicht noch andere Faktoren?
LOAD ist recht simpel: Pro CPU-Kern bedeutet ein Load von einer Einheit 100% Auslastung. Eine 1-Kern-CPU sollte also immer deutlich unter Load 1 gefahren werden, eine CPU mit 4 Kernen kann LOAD von 4 ab für 100% Auslastung. Mit einer Dual-8Kern-Maschine ist eine 100%-Auslastung bei LOAD 16.
Allerdings: Ein normaler Webserver kann, wenn er nix zu tun hat, auch Load von nahezu 0 haben. Wenn das nicht passiert, ist was kaputt und muss untersucht werden.
Ich hatte es mal erlebt, dass ein frisch vom Provider installierter Server leichtsinnigerweise ein ratbares User-Passwort für einen Standard-Account gesetzt bekam, und sich innerhalb von nicht einmal einer Stunde ein Bot einloggen konnte, sofort seinen Angreifer benachrichtigt hat, und dieser dann letztendlich nur eine Software installiert hat, die unter diesem Account ständig einen CPU-Kern voll ausgelastet hat, weil sie vermutlich in einer Endlosschleife irgendeinen Server betrieben hat. Warum diese Software so deutlich erkennbar Last auf der CPU verursacht hat, habe ich nicht im Detail untersuchen können, aber es war deutlich sichtbar, dass da was nicht stimmte.
Wenn euer Server also als Grundlast immer einen Load von 2 hatte, und niemals drunter (Rundungsfehler mal nicht betrachtet), dann deutet das, technisch neutral betrachtet, auf zwei andauernd laufende Prozesse hin, warum auch immer die sowas tun.
Und wenn der neue Server jetzt sowas nicht tut, dann wird das daran liegen, dass diese zwei Prozesse dort nicht gestartet wurden.
Als nächster Schritt käme natürlich auch das Optimieren von diversen PHP-Skripten und DB-Abfragen in Frage.
Es sollte analysiert werden, wo genau die Probleme sind. Und einfache Schritte sind natürlich leichter zu implementieren, als komplizierte Schritte. Analysen von Querys oder Codeoptimierung sind komplizierte Schritte.
Eine weitere Möglichkeit zur Optimierung wäre auch der Einsatz der Gzip-Komprimierung. Kann man diese ohne Bedenken einsetzen? Und wie wirkt sich das auf den LOAD aus? Oder wird da eher die CPU beansprucht? Hat die Gzip-Komprimierung Einfluss auf Suchmaschinen? Doch gar nicht, oder? Ich frag lieber ;-)
Deine Frage beweist, dass eine Problemanalyse noch nicht erfolgt ist. GZip bringt dem User selbst was, weil die Seiten schneller geladen sind. Sie verursacht allerdings auch eine gewisse CPU-Belastung, denn der Server muss die Komprimierung ja durchführen. Das ist allerdings eher zu vernachlässigen. GZip-Komprimierung sollte man unbedingt aktivieren, unabhängig von sonstigen Überlegungen.
Problematisch ist immer, wenn die Festplatte aktiv werden muss. Deshalb wird man beispielsweise die Datenbank so konfigurieren, dass sie den gesamten Datenbestand komplett gecached im RAM halten kann. Das kann bedeuten, dass man einen eigenständigen Datenbankserver benutzt, der nichts anderes tut, der mit entsprechend viel RAM ausgestattet ist, und der dann über eine schnelle Netzwerkanbindung an den Webserver angeschlossen ist. RAM ist durch nichts zu ersetzen - außer durch mehr RAM.
Auch das Caching des Webservers sollte einer kritischen Betrachtung unterzogen werden. Der Apache-Webserver ist zwar sehr universell, aber auch recht langsam. Erstens gibt es alternative Webserver, die vor allem bei hoher Last deutlich besser skalieren, zweitens gibt es auch Reverse-Proxys wie z.B. Varnish, die die cachebaren Requests einfach aus ihrem eigenen RAM beantworten, ohne den Apache zu fragen.
Weiterhin kann man auch recht effektiv Caching innerhalb der Webapplikation einbauen, wenn man analysiert hat, wo dort bislang die Schwachpunkte waren.
Und man liest ja hier und da mal auch was negatives
http://aktuell.de.selfhtml.org/artikel/server/apachetuning/index.htm#a12
Daher sind Erfahrungswerte dienlicher, denke ich.
Der Artikel ist von 2004 (siehe Metatags). Die Probleme mit Netscape 4 und schlechten Proxy-Servern dürften mittlerweile nicht mehr existieren, und die notwenig höhere Rechenlast der CPU wird heutzutage einfach durch die riesigen Leistungsgewinne bei aktuellen CPUs irrelevant.
- Sven Rautenberg