2010-07-29 139 views
0

有没有办法在CentOS中获得CPU使用率?我需要解析这些信息并从Perl脚本中绘制出来,所以它最好是一个打印出单个输出的简单工具。CentOS CPU使用率

回答

2

我实际上使用/ proc/stat for this ..这里是我用于dzen2小部件的python的重要部分。

while(1): 
    f = file("/proc/stat","r") 
    fcon = f.read().split("\n")[0].split() 
    new.user, unice, new.sys, new.idle, new.iowait = [ 
      int(x) for x in fcon[1:6] ] 

    new.user += unice 
    master.user = new.user - old.user 

    master.sys = new.sys - old.sys 
    master.idle = new.idle - old.idle 
    master.iowait = new.iowait - old.iowait 

    maxval = master.user + master.sys + master.idle + master.iowait 
    curval = master.user + master.sys + master.iowait 

    old.copy(new) 
    print (float(curval)/maxval) * 100) 
    time.sleep(1) 

这将打印第二个处理器的使用百分比。

错误的语言,我知道,但你应该能够得到输出的哪些列的含义是指什么。

3

更容易,看看/proc/loadavg,它显示是这样的:

$ cat /proc/loadavg 
0.37 0.67 0.68 1/312 8594 

前三个数字是“你需要处理当前负载的CPU数量“。这意味着在多核上你可以有5个负载没有问题。这三个数字在不同的时间间隔内平均(1分,5分钟和15分钟,根据man uptime

1

您可以在1(或更多)次迭代的批处理模式下使用top。然后使用grep解析它。

$ top -b -n 1 | grep -2 "load average"

top - 12:08:31 up 14 days, 19:03, 26 users, load average: 0.25, 0.45, 0.37 
Tasks: 219 total, 1 running, 217 sleeping, 0 stopped, 1 zombie 
Cpu(s): 4.2%us, 0.6%sy, 0.0%ni, 94.0%id, 1.0%wa, 0.0%hi, 0.3%si, 0.0%st 

$ top -b -n 1 | grep "Cpu(s)\:"

Cpu(s): 4.2%us, 0.6%sy, 0.0%ni, 94.0%id, 1.0%wa, 0.0%hi, 0.3%si, 0.0%st 

此外,您使用可以使用awk从那里得到一个特定的列和工作。

$ top -b -n 1 | grep "Cpu(s)\:" | awk '{print $2}'

4.2%us, 
+0

约'top'有趣的是,它总是出现在列表的顶部;-) – mvds 2010-07-29 19:31:14

1

我使用的 “顶部” 命令与一些的 “grep” 组合 “sed的” 和 “AWK” 命令:

  1. 首先,我通过执行列出的活动的进程: top -n 1
  2. 然后从结果中提取“%CPU”列:awk '{print $10}'。注意:其中10代表列数。 See Image
  3. 然后使用“sed”我从结果中删除一些不必要的行:sed '1,7d'
  4. 最后,我使用“awk”命令对所有百分比进行求和:awk '{s+=$1} END {print s}'See Image

最后一个命令将是这样的:top -n 1 | awk '{print $10}' | sed '1,7d' | awk '{s+=$1} END {print s}'