Linux Process Accounting - Unterschied zwischen den Feldern 'cp' und 'cpu'?

7

Ich habe versucht, mithilfe der Prozessabrechnung den Überblick über verschiedene Benutzer und Websites zu behalten, auf denen Skripte ausgeführt werden, die in unserer Umgebung problematisch sind, anstatt zu versuchen, in regelmäßigen Abständen so etwas wie das Scraping von oben durchzuführen.

Unklar ist, welche Felder die verwendeten CPU-Sekunden / Minuten wirklich angeben. Die Handbuchseiten, die ich gelesen habe, besagen, dass die Spalte "CPU" für Sekunden gebrannt ist. Es wird jedoch auch die Spalte "CPU" mit -m angezeigt - und sie können unterschiedliche Summen anzeigen. Zum Beispiel:

Wenn ich das Flag -m benutze, bekomme ich

 $sa -m | grep username
 username 14944      65.53re      29.90cp     5308k

Wenn ich das Flag -u verwende und die Spalte für 'cpu' summiere, erhalte ich Folgendes:

 sa -u |grep username|awk 'BEGIN{TOTAL=0}{TOTAL=TOTAL+$2}END{print TOTAL}'
 1032.86

Kann mir jemand helfen, den Unterschied zwischen den Spalten "cp" und "cpu" in diesen beiden verschiedenen Modi zu verstehen?

Vielen Dank!

epic9x
quelle
@ epic9x - Ich habe meine Antwort aktualisiert, da ich nicht dachte, dass meine erste hilfreich ist.
Patrick R

Antworten:

6

Lassen Sie mich anhand eines Beispiels erläutern, was Ihre obigen Ergebnisse zeigen:

Erstens: Ich habe ein Bash-Skript erstellt, das ich als Benutzer patrickr ausgeführt habe und das das System ausreichend belasten sollte, um wahrgenommen zu werden.

#!/bin/bash
#this file is named loop_script.sh
for i in {1..5000}
do
   echo "Welcome $i times"
done

Zweitens: Ich habe acct deinstalliert und dann neu installiert, damit meine Dateien in / var / log / acct aktuell sind. Erstellen Sie eine Kopie der Datei / var / log / acct / pacct, damit Sie die Datei in Zukunft problemlos mit einer ordnungsgemäß formatierten Datei abschneiden können (Sie können die Datei nicht einfach löschen und neu erstellen - sa funktioniert dann nicht mehr ). Beachten Sie, dass diese Datei ein Protokoll aller Befehle im System ist. Soweit ich das beurteilen kann, gibt es keine Möglichkeit, Teile aus dem Protokoll basierend auf Zeiträumen abzurufen.

Drittens: Ich habe dieses Skript dann zweimal als patrickr ausgeführt

patrickr@hostname:~$ bash loop_script.sh

Ich gebe Ihnen die Ergebnisse und erkläre sie dann:

Lief als root (oder ein anderer Benutzer als patrickr) Nach der ersten Schleife als patrickr:

**sa -m**
                            24       0.09re       0.03cp         0avio       894k
root                        22       0.07re       0.02cp         0avio       853k
patrickr                    2       0.02re       0.01cp         0avio      1336k

**sa -u |grep patrickr**

patrickr   0.38 cpu     1336k mem      0 io bash             

Nach der zweiten Runde als patrickr:

**sa -m**
                            30       0.09re       0.03cp         0avio       850k
root                        27       0.07re       0.02cp         0avio       814k
patrickr                    3       0.02re       0.01cp         0avio      1178k

**sa -u |grep patrickr**

patrickr   0.38 cpu     1336k mem      0 io bash            
patrickr   0.35 cpu     1336k mem      0 io bash            
patrickr   0.00 cpu      863k mem      0 io ls  (I happened to also run ls at patrickr)

**sa -u**

The results returned 106 results for a total of 2.86cpu that averaged to 0.03cp

Folgendes sehen Sie:

sa -m zeigt Durchschnittswerte für alle Aktivitäten für diesen Server über die Zeit an. Diese Datei wird mit der Zeit größer, wenn mehr Befehle ausgeführt werden.

sa -u | grep patrickr zeigt die Summe der System- und Benutzerzeit in CPU-Minuten für bestimmte Befehle an.

Laufen: sa -u | grep patrickr | awk 'BEGIN {TOTAL = 0} {TOTAL = TOTAL + $ 2} END {print TOTAL}'

Gibt Ihnen eine kombinierte Summe für Benutzer Patrick, aber der Befehl sa-m gibt Ihnen tatsächlich Durchschnittswerte. Werfen Sie einen Blick auf die Speicherwerte, wenn Sie ein zweites Beispiel benötigen. Sie sind auch gemittelt.

Wenn ich die drei oben für patrickr, .35 + .37 + .0 aufgelisteten Ergebnisse addiere und durch 106 dividiere und auf das nächste Hundertstel runde, erhalte ich 0,01 cp.

Das Ergebnis von 0,01 cp ist die durchschnittliche Auslastung des Benutzers patrickr auf dem System im Vergleich zu der gesamten Auslastung des Systems ab dem Zeitpunkt der Installation der acct-Anwendung (dh seit die Datei / var / log / acct / pacct den Überblick behält).

Output Fields
cpu   -  sum of system and user time in cpu minutes
re    -  actual time in minutes
k     -  cpu-time averaged core usage, in 1k units
k*sec -  cpu storage integral (kilo-core seconds)
u     -  user cpu time in cpu minutes
s     -  system time in cpu minutes

Eine gute Ressource, die Ihnen helfen wird, ist beginlinux.com (ursprünglicher Link hier ).

Patrick R.
quelle
Ich wollte mich nur für die unglaubliche Verzögerung entschuldigen, als ich mich für diese Antwort bedankte. Dies war eine fantastische Ressource für mich, und ich konnte es nicht sagen!
epic9x