Genaue Berechnung der CPU-Auslastung in Prozent angegeben, die in Linux?
Es ist eine Frage, die schon viele Male gefragt, aber es gibt keine gut unterstützt Antwort, die ich finden konnte.
Viele Leute empfehlen die Verwendung von top-Befehl, aber wenn du oben einmal (weil Sie ein script zum Beispiel das sammeln von Cpu-Auslastung alle 1 Sekunde), es wird immer das gleiche Cpu-Auslastung resultieren (Beispiel 1Beispiel 2).
Eine genauere Möglichkeit zur Berechnung der CPU-Auslastung, durch das Lesen der Werte aus /proc/stat
aber die meisten Antworten verwenden, werden nur die ersten 4 Felder aus /proc/stat
zu berechnen (ein Beispiel hier).
/proc/stat/
hat 10 Felder pro CPU-core als Linux-kernel 2.6.33!
Ich fand auch diese Präzise Berechnung der CPU-Auslastung in Linux mittels /proc/stat Frage, die zeigt sich das gleiche Problem, -dass die meisten anderen Fragen erst berücksichtigen, 4 aus den vielen Bereichen, aber immer noch die Antwort, die hier gegeben werden, beginnt mit "ich glaube" (nicht sicher), und außer, dass, es ist nur darum besorgt, dass die ersten 7 Felder (von 10 in /proc/stat/
)
Diese perl-Skript verwendet, alle Felder zu berechnen, die CPU-Auslastung, die ich nicht wieder denke, dass ist richtig, nach einigen weiteren Untersuchung.
Nachdem er einen kurzen Blick in den kernel-code hierwie es aussieht, zum Beispiel guest_nice
und guest fields
sind immer zusammen mit nice
und user
(Sie sollten also nicht in der cpu-Auslastung Berechnung, da Sie in nice
und user
bereits Felder)
/*
* Account guest cpu time to a process.
* @p: the process that the cpu time gets accounted to
* @cputime: the cpu time spent in virtual machine since the last update
* @cputime_scaled: cputime scaled by cpu frequency
*/
static void account_guest_time(struct task_struct *p, cputime_t cputime,
cputime_t cputime_scaled)
{
u64 *cpustat = kcpustat_this_cpu->cpustat;
/* Add guest time to process. */
p->utime += cputime;
p->utimescaled += cputime_scaled;
account_group_user_time(p, cputime);
p->gtime += cputime;
/* Add guest time to cpustat. */
if (task_nice(p) > 0) {
cpustat[CPUTIME_NICE] += (__force u64) cputime;
cpustat[CPUTIME_GUEST_NICE] += (__force u64) cputime;
} else {
cpustat[CPUTIME_USER] += (__force u64) cputime;
cpustat[CPUTIME_GUEST] += (__force u64) cputime;
}
}
Also zu summieren, was eine präzise Methode zur Berechnung der CPU-Auslastung in Linux und die Felder werden in den Berechnungen berücksichtigt und wie (welche Felder sind zurückzuführen auf die idle-Zeit und der Felder, die nicht-Leerlauf)?
InformationsquelleAutor der Frage Vangelis Tasoulas | 2014-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß der htop source-code zu der Zeit des Schreibens, meine Annahmen sieht, wie Sie sind gültig:
(siehe
void ProcessList_scan(ProcessList* this)
Funktion bei ProcessList.c)Und so, von der Felder in der ersten Zeile der
/proc/stat
: (siehe Abschnitt 1.8 auf Dokumentation)Algorithmisch, können wir berechnen, die CPU-Auslastung Prozentsatz wie:
InformationsquelleAutor der Antwort Vangelis Tasoulas
Folgende ist ein bash-Skript, basierend auf Vangelis ' s Antwort. Es erzeugt eine Ausgabe wie diese:
Erstellen Sie eine Datei namens
get_cpu_usage.sh
Führen Sie es mithilfe des folgenden Befehls:
bash get_cpu_usage.sh 0.2
Argument ist die Anzahl von Sekunden zu Messen. In diesem Fall sind es 200 Millisekunden.
Den Inhalt:
InformationsquelleAutor der Antwort Fidel
Hey, ich war auch der recherche für das Thema und fand diesen thread sehr hilfreich. Ich verwendet Vangelis Tasoulas Formel schreiben Sie eine kleine python-Skript für diese. Befestigt ist mein Python-code für die Ausgabe. Es lädt die cpu-Auslastung pro cpu_id jede Sekunde. Vielleicht hilft das anderen auch. Auch Kommentare/Vorschläge sind willkommen 🙂
InformationsquelleAutor der Antwort PlagTag
idnt.net hat eine gute Beschreibung zur Verwendung der /proc/stat cpu-Daten umfassen ein bash-Skript zum extrahieren von cpu und Beschreibung der Zeilen. Ich wollte nur den link hier, da fand ich es wertvoll.
InformationsquelleAutor der Antwort arberg