Ich würde gerne wissen, ob die Ausgabe eines Red-Hat-basierten Linux von einem Debian-basierten Linux anders interpretiert werden könnte.
Um die Frage noch spezifischer zu machen, möchte ich verstehen, wie der "Lastdurchschnitt" aus der ersten top
Befehlszeile eines Red-Hat-Systems interpretiert wird und wie dies durch den offiziellen Ro-Code der Dokumentation überprüft werden kann.
[Es gibt viele Möglichkeiten, sich diesem Thema zu nähern, die alle akzeptable Antworten auf die Frage sind.]
Ein möglicher Ansatz wäre, herauszufinden, wo diese Informationen offiziell dokumentiert sind.
Eine andere Möglichkeit wäre, die Codeversion zu finden, die top
in der spezifischen Distribution und Version, an der ich arbeite, erstellt wurde.
Die Befehlsausgabe, die ich erhalte, lautet:
top - 13:08:34 up 1:19, 2 users, load average: 0.02, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 96.8%id, 2.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922520k total, 788956k used, 3133564k free, 120720k buffers
Swap: 2097148k total, 0k used, 2097148k free, 344216k cached
Wie kann ich in diesem Fall den Lastdurchschnitt interpretieren ? Wert?
Ich habe festgestellt, dass die durchschnittliche Last ungefähr in letzter Minute von einer Dokumentationsquelle stammt und dass sie nach Multiplikation mit 100 von einer anderen Dokumentationsquelle interpretiert werden sollte.
Die Frage ist also:
Ist es 0,02% oder 2% geladen?
Dokumentationsquellen und -versionen:
1) Der erste Stern mit
TOP(1) Linux User’s Manual TOP(1)
NAME
top - display Linux tasks
Quelle: man top
In meiner RedHat-Distribution hat
Ubuntu auch die Version mit "Aufgaben", die den Lastdurchschnitt nicht erklärt:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html
2) Der zweite beginnt mit
TOP(1) User Commands TOP(1)
NAME top
top - display Linux processes
Quelle:
http://man7.org/linux/man-pages/man1/top.1.htm
3) Dieser beginnt mit:
TOP(1)
NAME
top - display and update information about the top cpu processes
Quelle: http://www.unixtop.org/man.shtml
Die erste ist man top
in RHEL
oder in zu sehen online ubuntu documentation
und enthält keine Erklärung für das Ausgabeformat (noch für den Lastdurchschnitt, an dem ich interessiert bin). .
Die zweite enthält eine kurze Erklärung, in der darauf hingewiesen wird, dass der Lastdurchschnitt mit der letzten 1 Minute zu tun hat, aber nichts über die Interpretation seines Wertes!
Ich zitiere direkt aus der zweiten Quelle:
2a. UPTIME- und LOAD-Durchschnittswerte
Dieser Teil besteht aus einer einzelnen Zeile, die Folgendes enthält:
Programm- oder Fensternamen, abhängig von der
aktuellen Zeit und der Zeitdauer seit dem letzten Start des Anzeigemodus
- Gesamtzahl der Benutzer
Systemlast avg in den letzten 1, 5 und 15 Minuten
Wenn diese Erklärung tatsächlich richtig ist, reicht es gerade aus zu verstehen, dass der Lastdurchschnitt ungefähr die letzte Minute beträgt.
Das Format der Nummer wird jedoch nicht erklärt.
Im dritten Erklärung heißt es:
Wenn Sie Zahlen für Lastmittelwerte angeben, sollten Sie diese mit 100 multiplizieren.
Diese Erklärung legt nahe, dass 0,02 2% und nicht 0,02% bedeutet. Aber ist das richtig? Ist es außerdem korrekt für alle Linux-Distributionen und potenziell unterschiedliche Implementierungen von top
?
Um die Antwort auf diese Frage zu finden, habe ich versucht, den Code durch Online-Suche durchzugehen. Aber ich habe mindestens zwei verschiedene Versionen von top
RHEL gefunden! das builtin-top.c
und das umgestaltete top.c
. Beide sind von Red-Hat urheberrechtlich geschützt, wie in der Mitteilung am Anfang des Codes angegeben, und daher erscheint es logisch, dass RHEL eine davon verwendet.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c
Bevor ich mich mit so viel Code befasste, wollte ich eine Meinung darüber, wo ich mich konzentrieren sollte, um ein genaues Verständnis dafür zu erhalten, wie die CPU-Last interpretiert wird.
Aus den Informationen in den Antworten unten habe ich zusätzlich zu einer persönlichen Suche Folgendes herausgefunden:
1 - Die von top
mir verwendeten Informationen sind im Paket procps-3.2.8 enthalten. Welches kann mit überprüft werden top -v
.
2 - In der Version procps-3.2.8
, die ich von der offiziellen Website heruntergeladen habe, scheint es, dass das Tool uptime
seine Informationen direkt aus der procfs
Datei /proc/loadavg
bezieht (ohne die Linux-Funktion zu verwenden getloadavg()
).
3 - Für den top
Befehl wird die Funktion jetzt ebenfalls nicht verwendet getloadavg()
. Ich habe es geschafft zu überprüfen, ob das top
tatsächlich die gleichen Dinge tut wie dasuptime
Werkzeug zum Anzeigen der Lastmittelwerte. Es ruft tatsächlich die uptime
Funktion des Tools auf, die seine Informationen aus der procfs
Datei erhält /proc/loadavg
.
Also zeigt alles auf die /proc/loadavg
Datei! Um ein genaues Verständnis des von load average
erzeugten zu erhalten top
, muss man den Kernel-Code lesen, um zu sehen, wie die Datei loadavg
geschrieben wird.
Es gibt auch einen ausgezeichneten Artikel, auf den in einer der Antworten hingewiesen wird, der die Begriffe eines Laien zur Erklärung der drei Werte von enthält loadavg
.
Trotz der Tatsache, dass alle Antworten gleichermaßen nützlich und hilfreich waren, werde ich die Antwort, die auf den Artikel http://www.linuxjournal.com//article/9001 verwies, als "die" Antwort auf meine Frage markieren
. Vielen Dank für Ihren Beitrag!
Zusätzlich habe ich aus der Frage Grundlegendes zum Top- und Lastdurchschnitt einen Link zum Quellcode des Kernels gefunden, der auf die Stelle verweist, an der loadavg
berechnet wird. Wie es scheint, gibt es einen großen Kommentar, der erklärt, wie es funktioniert, auch dieser Teil des Codes ist in C
!
Der Link zum Code lautet http://lxr.free-electrons.com/source/kernel/sched/loadavg.c. halber
Auch hier versuche ich nicht, mich auf irgendeine Form von Plagiaten einzulassen, sondern füge dies der Vollständigkeit halber hinzu. Ich wiederhole also, dass der Link zum Kernel-Code aus einer der Antworten in Grundlegendes zum Top- und Lastdurchschnitt gefunden wurde ...
quelle
top -v
)Antworten:
Die CPU-Auslastung ist die Länge der Ausführungswarteschlange, dh die Länge der Warteschlange der Prozesse, die darauf warten, ausgeführt zu werden.
Der
uptime
Befehl kann verwendet werden, um die durchschnittliche Länge der Ausführungswarteschlange in der letzten Minute, den letzten fünf Minuten und den letzten 15 Minuten anzuzeigen, genau wie dies normalerweise von angezeigt wirdtop
.Ein hoher Ladewert bedeutet, dass die Ausführungswarteschlange lang ist. Ein niedriger Wert bedeutet, dass er kurz ist. Wenn der Lastdurchschnitt von einer Minute 0,05 beträgt, bedeutet dies, dass in dieser Minute durchschnittlich 0,05 Prozesse darauf warteten, in der Ausführungswarteschlange ausgeführt zu werden. Es ist kein Prozentsatz. Dies ist, AFAIK, auf allen Unices gleich (obwohl einige Unices möglicherweise keine Prozesse zählen, die auf E / A warten, was Linux meiner Meinung nach tut; OpenBSD zählte nur für eine Weile auch Kernel-Threads, so dass die Last immer 1 oder 1 betrug Mehr).
Das Linux-
top
Dienstprogramm ruft die Ladewerte vom Kernel ab, in den sie geschrieben werden/proc/loadavg
. Wennprocps-3.2.8
wir uns die Quellen ansehen, sehen wir Folgendes:sprint_uptime()
Funktion aufgerufentop.c
.proc/whattime.c
und ruftloadavg()
aufproc/sysinfo.c
.LOADAVG_FILE
, um die Lastmittelwerte zu lesen.LOADAVG_FILE
ist früher definiert als"/proc/loadavg"
.quelle
top
unduptime
sind keine POSIX-Dienstprogramme, und diegetloadavg()
Bibliotheksfunktion ist auch in POSIX nicht definiert (es gibt jedoch eine BSD-Linie).top
ankomme , muss ich noch den Wert in die procfs-Datei loadavg einbinden ...Der Lastdurchschnitt wird normalerweise vom Kernel berechnet. Anwendungen wie
top
unduptime
können dengetloadavg(3)
Bibliotheksaufruf verwenden, um darauf zuzugreifen (er soll für verschiedene Unix-Versionen portierbar sein). Unter Linux führt dies normalerweise zu einem Lesen von/proc/loadavg
. Unter FreeBSD ist es ein Systemaufruf.Beispielsweise:
uptime
undtop
beide führen ähnliche Anrufe durch, um ihre Daten zu erhalten.Jetzt sind die Lastmittelwerte von 1/5/15 Minuten die Anzahl der Prozesse in der Ausführungswarteschlange. Unterschiedliche Betriebssysteme können dies auf unterschiedliche Weise berechnen. Der größte Unterschied besteht normalerweise darin, ob Prozesse, die auf E / A warten (z. B. auf der Festplatte blockiert), als ausführbar gelten oder nicht. Unter Linux sind sie.
Ein Lastdurchschnitt von 3,4 bedeutet also, dass sich durchschnittlich 3,4 Prozesse in der Ausführungswarteschlange innerhalb des Beispielfensters befanden (1, 5, 15 Minuten).
Ein hoher Lastdurchschnitt bedeutet jedoch nicht unbedingt einen überlasteten Server. Wenn Sie 16 Kerne haben, kann Ihr Lastdurchschnitt 16 ohne Stress betragen. Es können auch viele Anwendungsaufrufe auftreten
fork()
, die dazu führen können, dass eine große Anzahl von Prozessen erstellt / zerstört wird, was zu einem hohen Auslastungsdurchschnitt führt, ohne jedoch die Serverleistung massiv zu beeinträchtigen. Es sollte nur als Leitfaden verwendet werden, zusammen mit anderen Metriken wie% CPU beschäftigt.quelle
Der Lastdurchschnitt ist nicht spezifisch für ein bestimmtes Tool oder eine bestimmte Verteilung, sondern eine vom Kernel bereitgestellte Messung, genauer gesagt der Scheduler. Daher handelt es sich um eine verteilungsunabhängige Messung. Die Messung wird im proc-Dateisystem aufgezeichnet
/proc
Bei der Interpretation gibt die durchschnittliche Auslastungsmetrik nicht an, wie hart die CPU arbeitet, sondern wie viel Arbeit erledigt werden muss. Ich glaube nicht, dass es wirklich notwendig ist, es mit irgendetwas zu multiplizieren, da es eine direkte Messung der Anzahl von Prozessen in einem ausführbaren oder unterbrechungsfreien Zustand ist.
Schauen Sie sich die folgenden zwei Manpages an:
getloadavg(3)
unduptime
für weitere Informationen.Die Metrik der durchschnittlichen Last kann zunächst ein schwer zu verstehendes Konzept sein. Ich denke, viele Leute denken, dass dies ein Hinweis darauf ist, wie hart die CPU arbeitet, aber das ist es nicht wirklich.
quelle
getloadavg()
Funktionsbeschreibung beschriebenetop
Lastdurchschnitt der gleiche Lastdurchschnitt ist, den der Befehl in rhel anzeigt? Ich frage dies, weil ich eine Volltextsuche im nicht geteerten Inhalt des Pakets procps-3.2.8 (was durch den Befehl angezeigt wirdtop -v
) durchgeführt habe und die Funktion getloadavg () nicht einmal erwähnt wird! Also, vielleicht berechnet top den Lastdurchschnitt auf eine andere Art ...