man ps
im NOTES
abschnitt.
CPU usage is currently expressed as the percentage of time spent running
during the entire lifetime of a process. This is not ideal, and it does not
conform to the standards that ps otherwise conforms to. CPU usage is
unlikely to add up to exactly 100%.
Und, schätze, du weißt, aber du kannst auch:
top -p <PID>
Bearbeiten : in Bezug auf Ihren Kommentar zu einer anderen Antwort;
" Hmm ja, ich frage mich, wie man das (den momentanen CPU-Prozentsatz) von ps bekommt. "
Kurze Antwort: Das kannst du nicht.
Wieso ist es so?
Es ist, als würde man jemanden bitten, die Geschwindigkeit eines Autos aus einem Bild zu berechnen.
While top
ist ein Überwachungstool, es ps
ist ein Snapshot-Tool. Stellen Sie sich das so vor: Zu jedem Zeitpunkt verwendet ein Prozess entweder die CPU oder nicht. Somit haben Sie entweder 0% oder 100% Last in genau diesem Moment.
Geben: Wenn ps
eine sofortige CPU-Auslastung erzielt werden soll, ist dies entweder 0% oder 100%.
top
auf der anderen Seite halten Sie die Abrufnummern und berechnen Sie die Last über die Zeit.
ps
hätte die aktuelle Nutzung angeben können - aber dafür müsste es die Daten mehrmals lesen und zwischen den einzelnen Lesevorgängen in den Ruhezustand wechseln. Das tut es nicht.
Berechnung für ps% CPU
ps
berechnet die CPU-Auslastung folgendermaßen:
Betriebszeit = Gesamtzeit, in der das System ausgeführt wurde.
ps_time = Prozessstartzeit, gemessen in Sekunden nach dem Start.
pu_time = Gesamtzeit, in der der Prozess die CPU verwendet hat.
;; Sekunden Prozess wurde ausgeführt:
Sekunden = Betriebszeit - ps_time
;; Verwendungszweck:
cpu_usage = pu_time * 1000 / seconds
print: cpu_usage / 10 "." cpu_usage% 10
Beispiel:
Betriebszeit = 344.545
ps_time = 322.462
pu_time = 3.383
Sekunden = 344,545 - 322,462 = 22,083
cpu_usage = 3.383 * 1.000 / 22.083 = 153
Druck: 153/10 "." 153% 10 => 15,3
Die aufgedruckte Zahl lautet also: Zeitpunkt, zu dem der Prozess die CPU während seiner Lebensdauer verwendet hat. Wie im obigen Beispiel. Es hat dies in 15,3% seiner Lebensdauer getan. In 84,7% der Fälle wurde kein Fehler in der CPU festgestellt.
Datenabruf
ps
Sowie top
nutzt Daten aus Dateien unter gespeichert /proc/
- oder den Prozessinformationen Pseudo-Dateisystem .
Sie haben einige Dateien im Stammverzeichnis /proc/
, die verschiedene Informationen über den Gesamtzustand des Systems enthalten. Darüber hinaus verfügt jeder Prozess über einen eigenen Unterordner, /proc/<PID>/
in dem prozessspezifische Daten gespeichert werden. So hatte zum Beispiel der Prozess Ihrer Frage einen Ordner unter /proc/3038/
.
Bei der ps
Berechnung der CPU-Auslastung werden zwei Dateien verwendet:
/ proc / uptime Die Betriebszeit des Systems (Sekunden) und die im Leerlauf verbrachte Zeit (Sekunden).
/ proc / [PID] / stat Statusinformationen zum Prozess.
- Daraus
uptime
wird der erste Wert ( Uptime ) verwendet.
- Daraus
[PID]/stat
ergibt sich folgendes:
# Name Beschreibung
14-malige CPU-Zeit, die im Benutzercode verbracht wurde, gemessen in Sekundenschnelle
15 Stunden CPU-Zeit im Kernel-Code, gemessen in Sekundenschnelle
16 Stunden CPU-Zeit, die im Benutzercode verbracht wurde, einschließlich der Zeit von Kindern
17 cstime CPU-Zeit im Kernel-Code, einschließlich der Zeit von Kindern
22 starttime Zeitpunkt, zu dem der Prozess gestartet wurde, gemessen in Sekundenschnelle
Ein Jiffie ist ein Uhrzeiger. Außerdem werden verschiedene Methoden verwendet, sysconf(_SC_CLK_TCK)
um die Hertz (Anzahl der Ticks pro Sekunde) des Systems zu ermitteln. Letztendlich wird 100 als Ersatz verwendet, nachdem andere Optionen ausgeschöpft wurden.
Wenn utime
also 1234 und Hertz 100 ist, dann:
seconds = utime / Hertz = 1234 / 100 = 12.34
Die eigentliche Berechnung erfolgt durch:
total_time = utime + stime
IF include_dead_children
total_time = total_time + cutime + cstime
ENDIF
seconds = uptime - starttime / Hertz
pcpu = (total_time * 1000 / Hertz) / seconds
print: "%CPU" pcpu / 10 "." pcpu % 10
Beispiel (Ausgabe von einem benutzerdefinierten Bash-Skript):
$ ./psw2 30894
System information
uptime : 353,512 seconds
idle : 0
Process information
PID : 30894
filename : plugin-containe
utime : 421,951 jiffies 4,219 seconds
stime : 63,334 jiffies 633 seconds
cutime : 0 jiffies 0 seconds
cstime : 1 jiffies 0 seconds
starttime : 32,246,240 jiffies 322,462 seconds
Process run time : 31,050
Process CPU time : 485,286 jiffies 4,852 seconds
CPU usage since birth: 15.6%
Berechnung der "aktuellen" Last mit ps
Dies ist ein (bisschen?) Zwielichtiges Unterfangen, aber in Ordnung. Lass uns gehen.
Man könnte die von zur Verfügung gestellten Zeiten nutzen ps
und daraus die CPU-Auslastung berechnen. Wenn man darüber nachdenkt, könnte es tatsächlich mit einigen Einschränkungen ziemlich nützlich sein.
Dies kann nützlich sein, um die CPU-Auslastung über einen längeren Zeitraum zu berechnen. Das heißt, Sie möchten die durchschnittliche CPU-Auslastung plugin-container
in Firefox überwachen, während Sie eine Firefox-bezogene Aufgabe ausführen.
Durch Verwendung der Ausgabe von:
$ ps -p -o cputime, etimes
CODE HEADER DESCRIPTION
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format. (alias time).
etime ELAPSED elapsed time since the process was started, [DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in seconds.
Ich benutze etime
es etimes
in diesem Beispiel für Berechnungen, nur um es ein bisschen klarer zu machen. Außerdem füge ich% cpu zum "Spaß" hinzu. In zB einem Bash-Skript würde man offensichtlich verwenden etimes
- oder besser aus /proc/<PID>/
etc. lesen .
Start:
$ ps -p 30894 -o %cpu,cputime,etime,etimes
%CPU TIME ELAPSED ELAPSED
5.9 00:13:55 03:53:56 14036
End:
%CPU TIME ELAPSED ELAPSED
6.2 00:14:45 03:56:07 14167
Calculate times:
13 * 60 + 55 = 835 (cputime this far)
3 * 3,600 + 53 * 60 + 56 = 14,036 (time running this far)
14 * 60 + 45 = 885 (cputime at end)
3 * 3,600 + 56 * 60 + 7 = 14,167 (time running at end)
Calculate percent load:
((885 - 835) / (14,167 - 14,036)) * 100 = 38
Der Prozess hat in dieser Zeit 38% der Zeit die CPU ausgelastet.
Schauen Sie sich den Code an
Wenn du wissen willst wie ps
es geht und ein wenig C kennst, mach (sieht aus als ob du Gnome Debain deriavnt ausführst) - nette Einstellung im Code bezüglich Kommentaren etc .:
apt-get source procps
cd procps*/ps
vim HACKING
top
und kontinuierlicher Überwachung durchführen - oder "ps
" mit der aktuellen CPU-Auslastung " " durch Verzögerung einrasten .quelle
ps
top -p 3343 -n1 | awk '/ R /{print $10}'
awk
: ing für daspid
hat bessertop -p 3343 -n1 | awk '/ 3343 /{print $10}'
top -p $PID -n1 | awk '{if (NR ==8) print $9 }'