如何取得每個會話的 CPU 和記憶體使用量 Linux

如何取得每個會話的 CPU 和記憶體使用量 Linux

我必須在 bash 中編寫一個腳本來計算 Linux 中每個會話的 CPU 和記憶體使用百分比。

我可以在腳本中使用哪些標準 UNIX 工具來取得此資訊?

我有這個

ML_CPU=$(ps -e -o pcpu= | awk '{sum+=$1} END {print sum}') 

…但我無法取得一個會話的 CPU 百分比,例如pts/1.

答案1

解析以下命令的輸出應該可以滿足您的需求:

$ free
$ top -bn 1

另請參閱cron,這是一種以特定時間間隔運行命令的方法。您可能需要為每個使用者建立一個 crontab 來記錄該會話的統計資料。


更新:

我不確定我明白你在這裡想要什麼。如果您需要目前的每個 pts/tty 的 CPU %,請嘗試下面的腳本。如果您需要收集全部的使用者會話的 CPU 和 MEM 百分比查看 cron。

這是一個 PERL 腳本,如果您需要巴什讓我知道。

#!/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";
}

在我的系統上,我得到:

$ ./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

相關內容