Wann ist der Server ausgelastet?
Ich hatte heute eine kurze Diskussion darüber, woran man erkennt, das ein Server ausgelastet ist. Liegt es an der CPU-Auslastung? Load von 1 per CPU? Interrupts? Context Switche? IOWait? Averade Service Time? Swap? Vorschläge sind erbeten.
Die einfachste Methode wäre wohl per “uptime”, nicht sehr aussagekräftig aber es funktioniert meistens.
Das ist so eine richtige Metafrage. Was heißt denn überhaupt “ausgelastet”? Das ist doch je nach Anwendung anders, ein Number-Cruncher ist halt bei 100% CPU (je Kern) ausgelastet, eine Fileserver z. B. bei der Sättigung der Netzwerkschnittstelle, wenn es gut läuft. Oder wenn die Festplatten am Anschlag sind, so dass die Netzwerkkarte gar nicht gesättigt werden kann. Am Universellsten ist eigentlich immer noch der Load-Wert, aber verallgemeinern kann man das glaub nicht.
@Usul: Genau deswegen Frage ich ja. Je mehr Möglichkeiten, desto mehr Lösungs-Ansätze.
Kommt sicher auf die Arbeitslast an. Aber man kann natürlich die wichtigsten Indikatoren für CPU, Memory und IO ansehen:
- IO – average servive time ist ein guter Warn Indikator (<12ms)
- Memory – swap aktivität
- CPU – idle-time mehr CPU kann genutzt werden
Die Frage ist dann nur, welcher Art Durchschnittsberechnung man verwendet. Auch hier kann man dann wieder 2 Verfahren kombinieren. Wenn der 5mins Durchschnitt über einer konservativen Schwelle liegt und der 1mins Durchschnitt über einem Akzeptablen Maximum.
Ansonten bleibt natürlich immer noch die Lehrbuchmethode: End-to-End PErformance messen und mit den SLO abgleichen. Leztere sind aber meistens nicht sehr realistisch…
Gruss
Bernd
“Ist der Server ausgelastet?” ist viel zu schwammig dahergeschwätzt. Was ist “Auslastung”, was ist “Überlastung”? Liegt “Auslastung” vielleicht schon dann vor, wenn nur ein einziger Nutzprozeß läuft und der Rechner nicht mehr 100% idelt? Ohne klare Sprachregelung kommst Du hier nicht weiter.
Ich wuerd’ grundsaetzlich erstmal fuer IOWait stimmen.
Ich tendiere zu einer Mischung aus run-Queue, IOWait und CPU-Last.
Unabhängig welchen Indikator man verwendet halte ich mich an folgendes:
Wenn die produktionskritische Ressource dauerhaft über 50% ausgelastet ist und regelmäßig Peaks bis auf über 80% Auslastung hat, dann ist es höchste Zeit etwas zu unternehmen.
Wie oben schon gesagt kann das bei jedem Server etwas anderes sein. CPU, Speicher, IO-Auslastung oder auch alles zusammen oder einzelen Kombinationen.
Ach ja und wenn ein Server anfängt zu swappen, dann ist es sowieso schon zu spät.
Wenn du nicht mehr via SSH auf die Maschine kommst – DANN ist die ausgelastet ;-)
Gute Frage, nicht einfach zu beantworten. :)
Bevor man sagen kann ob und zu wie viel ein Server belastet ist, muss jemand definieren was die “Normalität” ist und ab wann eine Abweichung von diesem Zustand zu Auswirkungen führt, die die ‘Average Service Time’ beeinflusst. Discuss.
Ich war extra so Vage eben weil es viele Wege gibt sich der Sache zu nähern. Mich interessiert halt wie Ihr an so ein Problem herangeht.
Das ist ja schön und gut. Aber was meinst Du mit “ausgelastet”? Zu “ausgelastet” gehört eigentlich noch eine Größenangabe, wie z.B. “nicht ausgelastet”, “zur Hälfte ausgelastet” oder “voll ausgelastet”.
Meine Faustregel sieht so aus, daß ein Server am Optimum läuft, wenn das Load Average der Anzahl der Prozessoren entspricht. :-)
Diese Faustregel wird im allgemeinen auch an vielen Stellen im Netz empfohlen, sagt aber natürlich über bestimmte Details überhaupt nichts aus…
Da sollte man dann schon wissen ob man einen Fileserver aufgesetzt hat oder nur mal wieder die 10^-99999. Stelle von Pi berechnen will.
@martin: Ich meinte ‘voll ausgelastet’. Das mit der Load ist in der Tat ein gutes Indiz.
@Dr Tod: D.h. wenn eine Rescource (CPU, Prozessor-Zeit, RAM, Disk/Net-IO) voll belegt ist, ist der Server voll ausgelastet?
@joern ich bezog mich auf load Average/ Anzahl Prozessoren >= 1
An dieser Stelle ist auf keinen Fall eine Ressource unbedingt komplett ausgelastet, es kann jedoch vorkommen.
Also Load von 1/CPU(Kern) reicht sicher nicht aus. Als Daumenregel funktionieren für reine Webserver mit Massen an Prozessen doch eher eine Load Average von ca. 3-5/CPU(Kern). Meist sind eher Swap und der darausfolgende IO die wirklich begrenzenden Dinge.
Meiner Meinung nach ist ein System dann voll ausgelastet, wenn die darauf eingesetzte Software nicht mehr innerhalb einer akzeptablen Zeit antwortet oder gar ein Prozess andere so in Mitleidenschaft zieht, dass diese nicht mehr ordentlich reagieren (wie z.B. der von prodigy7 genannten sshd, wenn der Web-Häuptling mal spinnt ;) ).
Auch ich würde den Load i.d.R. als Bezugsgröße nehmen. Aber spätestens wenn eine Karre anfängt zu swappen, ist der Load auch nur noch sekundär.
Also kann imho nur eine gemeinsame Betrachtung aller verfügbaren Ressourcen den Aufschluss bringen, ob ein System “voll ausgelastet” ist, oder nicht – bei mir wird daher “vmstat 2″ immer wieder abgesetzt, der betrachtet die wichtigsten Kerngrößen und verrät eigentlich immer, an welcher Stelle man denn wohl zuerst anpacken sollte, um einen Server wieder in Schwung zu bringen.
Gruß
Stefan
Ich denke, dass die Aussage von Joern schon am ehesten zutrifft:
Wenn einer der Punkte (CPU, Prozessor-Zeit, RAM, Disk/Net-IO) sich im Maximalbereich bewegt ist der Server ausgelastet. Er kann nicht noch mehr arbeit übernehmen. Jede weitere Zumutung wird dann evtl. mit zu langen Antwortzeiten bestraft…
My 2 cents…