Using the ps command

Der Befehl ps ist ein flexibles Tool zum Ermitteln der Programme, die auf dem System ausgeführt werden, und der Ressourcen, die sie verwenden. Er zeigt Statistiken und Statusinformationen zu Prozessen im System an, z. B. Prozess-oder Thread-ID, E/A-Aktivität, CPU-und Speicherauslastung.

In diesem Abschnitt werden die Optionen und Ausgabefelder erläutert, die für die CPU relevant sind.

Drei der möglichen ps -Ausgabespalten geben die CPU-Auslastung auf unterschiedliche Weise an.

Spalte
Wert:
C
Kürzlich verwendete CPU-Zeit für den Prozess (in Taktgebereinheiten).
TIME
Die gesamte CPU-Zeit, die vom Prozess seit seinem Start verwendet wurde (in Minuten und Sekunden).
%CPU
Die gesamte CPU-Zeit, die vom Prozess seit seinem Start verwendet wurde, dividiert durch die abgelaufene Zeit seit dem Start des Prozesses. Diese Zeit ist ein Maß für die CPU-Abhängigkeit des Programms.

CPU-intensiv

Das folgende Shell-Script:
# ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15
ist ein Werkzeug, um sich auf die zuletzt verwendeten CPU-intensiven Benutzerprozesse im System zu konzentrieren (die Kopfzeile wird zur Verdeutlichung wieder eingefügt):
     UID   PID  PPID   C    STIME    TTY  TIME CMD
    mary 45742 54702 120 15:19:05 pts/29  0:02 ./looper
    root 52122     1  11 15:32:33 pts/31 58:39 xhogger
    root  4250     1   3 15:32:33 pts/31 26:03 xmconsole allcon
    root 38812  4250   1 15:32:34 pts/31  8:58 xmconstats 0 3 30
    root 27036  6864   1 15:18:35      -  0:00 rlogind
    root 47418 25926   0 17:04:26      -  0:00 coelogin <d29dbms:0>
    bick 37652 43538   0 16:58:40  pts/4  0:00 /bin/ksh
    bick 43538     1   0 16:58:38      -  0:07 aixterm
     luc 60062 27036   0 15:18:35 pts/18  0:00 -ksh

Die Spalte (C) Gibt die zuletzt verwendete CPU an Der Prozess des Schleifenprogramms leitet die Liste. DerCWert kann die CPU-Auslastung des Schleifenprozesses minimieren, da der Scheduler die Zählung bei 120 stoppt. Bei einem Multithread-Prozess gibt dieses Feld die Summe des CP an, das für alle Threads in diesem Prozess aufgelistet ist.

Das folgende Beispiel zeigt ein einfaches Fünf-Thread-Programm mit allen Threads in einem Programm mit Endlosschleife:
ps -lmo THREAD -p 8060956
    USER     PID    PPID       TID ST  CP PRI SC    WCHAN        F     TT BND COMMAND
    root 8060956 6815882         - A  720 120  0        -   200001  pts/0   - ./a.out
       -       -       -   8716483 R  120 120  0        -   400000      -   - -
       -       -       -  17105017 R  120 120  0        -   400000      -   - -
       -       -       -  24182849 R  120 120  0        -   400000      -   - -
       -       -       -  24510589 R  120 120  0        -   400000      -   - -
       -       -       -  30277829 R  120 120  0        -   400000      -   - -
       -       -       -  35913767 R  120 120  0        -   400000      -   - -
In der Spalte CP gibt der Wert 720 die Summe der einzelnen Threads an, die unter diesem Wert aufgelistet sind, d. h. (5 * 120) + (120).

CPU-Zeitverhältnis

Der Befehl ps , der in regelmäßigen Abständen ausgeführt wird, zeigt die CPU-Zeit unter demTIMESpalte und das Verhältnis von CPU-Zeit zu Echtzeit unter der%CPUentsprechenden Spalte hinzu. Suchen Sie nach den Prozessen, die die Nutzung dominieren. Die Optionen au und v liefern ähnliche Informationen zu Benutzerprozessen. Die Optionen aux und vg zeigen sowohl Benutzer-als auch Systemprozesse an.

Das folgende Beispiel stammt aus einem Vier-Wege-SMP-System:
# ps au
USER       PID %CPU %MEM   SZ  RSS    TTY STAT    STIME TIME COMMAND
root     19048 24.6  0.0   28   44  pts/1 A    13:53:00  2:16 /tmp/cpubound
root     19388  0.0  0.0  372  460  pts/1 A      Feb 20  0:02 -ksh
root     15348  0.0  0.0  372  460  pts/4 A      Feb 20  0:01 -ksh
root     20418  0.0  0.0  368  452  pts/3 A      Feb 20  0:01 -ksh
root     16178  0.0  0.0  292  364      0 A      Feb 19  0:00 /usr/sbin/getty
root     16780  0.0  0.0  364  392  pts/2 A      Feb 19  0:00 -ksh
root     18516  0.0  0.0  360  412  pts/0 A      Feb 20  0:00 -ksh
root     15746  0.0  0.0  212  268  pts/1 A    13:55:18  0:00 ps au
Der%CPUDer Prozentsatz der CPU-Zeit, der diesem Prozess seit dem Start des Prozesses zugeordnet wurde. Sie wird wie folgt berechnet:
(process CPU time / process duration) * 100

Stellen Sie sich zwei Prozesse vor: Der erste startet und läuft fünf Sekunden, wird aber nicht beendet; der zweite startet und läuft fünf Sekunden, wird aber nicht beendet. Der Befehl ps zeigt jetzt 50 Prozent an.%CPUfür den ersten Prozess (fünf Sekunden CPU für 10 Sekunden verstrichene Zeit) und 100 Prozent für die Sekunde (fünf Sekunden CPU für fünf Sekunden verstrichene Zeit).

Auf einem SMP wird dieser Wert durch die Anzahl der verfügbaren CPUs auf dem System dividiert. Wenn Sie auf das vorherige Beispiel zurückblicken, ist dies der Grund, warum die%CPUDer Wert für den Prozess cpubound überschreitet nie 25, da das Beispiel auf einem Vier-Wege-Prozessorsystem ausgeführt wird. Der Prozess cpubound verwendet 100 Prozent eines Prozessors, aber der%CPUWert wird durch die Anzahl der verfügbaren CPUs dividiert.

Option THREAD

Der Befehl ps kann mit dem Befehl ps -mo THREAD Threads und die CPUs anzeigen, an die Threads oder Prozesse gebunden sind. Beispiel:
# ps -mo THREAD
USER PID   PPID  TID   ST CP PRI SC WCHAN F      TT    BND COMMAND
root 20918 20660 -     A  0  60  1  -     240001 pts/1 -   -ksh
-    -     -     20005 S  0  60  1  -     400    -     -   -

DerTIDSpalte zeigt die Thread-ID, dieBNDSpalte zeigt Prozesse und Threads an, die an einen Prozessor gebunden sind.

Es ist normal, einen Prozess mit dem Namenkproc(PID 516 in Betriebssystemversion 4) CPU-Zeit verwenden. Wenn es keine Threads gibt, die während einer Zeitscheibe ausgeführt werden können, ordnet der Scheduler die CPU-Zeit für diese Zeitscheibe diesem Kernelprozess (kproc) zu, der als idle oder wait kproc bezeichnet wird. SMP-Systeme verfügen über einen inaktiven kproc für jeden Prozessor.