Ich muss in Bash ein Skript ausführen, um den Prozentsatz der CPU- und Speichernutzung pro Sitzung in Linux zu berechnen.
Welche Standard-UNIX-Tools kann ich in meinem Skript verwenden, um diese Informationen zu erhalten?
ich habe das
ML_CPU=$(ps -e -o pcpu= | awk '{sum+=$1} END {print sum}')
… aber ich kann den CPU-Prozentsatz für eine Sitzung nicht abrufen, beispielsweise für pts/1
.
Antwort1
Das Analysieren der Ausgabe der folgenden Befehle sollte Ihnen das liefern, was Sie benötigen:
$ free
$ top -bn 1
Sehen Sie sich auch an cron
, es ist eine Möglichkeit, Befehle in bestimmten Intervallen auszuführen. Sie müssen wahrscheinlich für jeden Benutzer eine Crontab erstellen, die die Statistiken für diese Sitzung protokolliert.
AKTUALISIEREN:
Ich bin nicht sicher, ob ich verstehe, was Sie hier wollen. Wenn Sie dieaktuellCPU % für jeden Punkt/TTY, versuchen Sie das folgende Skript. Wenn Sie diegesamtDie CPU- und MEM-Prozentsätze für die Sitzung eines Benutzers werden in Cron angezeigt.
Dies ist ein PERL-Skript, wenn SiebrauchenBASH, lass es mich wissen.
#!/usr/bin/perl -w
## Collect ps output
open(A, "ps xo pcpu,pmem,tty |");
my %stats;
while (<A>){
## Ignore 1st line
next if $.==1;
## Remove new line character (\n)
chomp;
## Get the CPU% and TTY
/\s*(.+)\s(.+)\s(.+)$/;
## Add the CPU% ($1) and MEM% ($2) for each TTY ($3)
$stats{$3}{CPU}+=$1;
$stats{$3}{MEM}+=$2;
}
close(A);
## Sort output by CPU%. Use 'sort -nk 5' for MEM%
open(A, "| sort -nk 3");
## The keys of the %stats hash are the different
## TTYs (including '?'). Cycle through and print
foreach (keys(%stats)) {
print A "$_\tCPU%: $stats{$_}{CPU} \tMEM%: $stats{$_}{MEM}\n";
}
Auf meinem System erhalte ich:
$ ./cpu_percent.pl
pts/0 CPU%: 0 MEM%: 0
pts/2 CPU%: 0 MEM%: 0
pts/3 CPU%: 0 MEM%: 0
pts/4 CPU%: 0 MEM%: 0
pts/5 CPU%: 0 MEM%: 0
pts/7 CPU%: 0 MEM%: 0
pts/8 CPU%: 0 MEM%: 0
tty3 CPU%: 0.3 MEM%: 0
pts/6 CPU%: 0.8 MEM%: 0.5
pts/1 CPU%: 0.9 MEM%: 0.5
? CPU%: 14.7 MEM%: 15.4