CPU使用率服务器和监控信息

时间:2017-07-13 12:47:44

标签: linux bash sh cpu monitoring

我需要使用shell脚本检查,可能没有安装任何特定软件包(操作系统:Linux Suse 12),总CPU%使用率,以便在不超过临界阈值的情况下监控级别

这是一台拥有2x E5-2667 v4 8 /核心的巨大服务器。

enter image description here

仔细查看我发现的问题并尝试了一下:

1-top -bn1 | grep "Cpu(s)" | \sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \awk '{print 100 - $1"%"}'

2-CPU_LOAD=$(sar -P ALL 1 2 |grep 'Average.*all' |awk -F" " '{print 100.0 -$NF}') 

我也试图从iostat

做100空闲
  1. 在多CPU /多核系统上这是否真的正确?
  2. 是否正确使用正常运行时间的cpu负载计算cpu总使用量?
  3. 使用代码我得到了一个单核的平均值,而我需要在%中使用总CPU的结果 问候, 感谢

3 个答案:

答案 0 :(得分:1)

您可能更好地在awk中完全实现解决方案:

top -bn1 | awk -F, '/id/ { for (i=1;i<=NF;i++) { if ( $i ~ /[[:digit:]]{2}.[[:digit:]][[:blank:]]+id/ ) { split($i,arry," ");print arry[1]" - idle" }'

从顶部获取输出,然后检查包含id的任何输出。如果满足条件,则将行上的每个逗号分隔数据和模式匹配2个数字,小数,然后是一个或多个数字,空白,然后是id。如果是这种情况,请将基于空格的变量拆分为数组并打印第一个元素。

答案 1 :(得分:1)

如果您想获得任何详细统计信息,您也可以使用perf。 在此示例中,您可以看到1秒内所有CPU周期的数量:

-bash-4.1# perf stat -a sleep 1

Performance counter stats for 'system wide':

   4002.822144      task-clock (msec)         #    3.999 CPUs utilized            (100.00%)
         22809      context-switches          #    0.006 M/sec                    (100.00%)
          1332      cpu-migrations            #    0.333 K/sec                    (100.00%)
         23794      page-faults               #    0.006 M/sec                  
    5409531172      cycles                    #    1.351 GHz                      (100.00%)
<not supported>      stalled-cycles-frontend  
<not supported>      stalled-cycles-backend   
    3874289082      instructions              #    0.72  insns per cycle          (100.00%)
     715152901      branches                  #  178.662 M/sec                    (100.00%)
      20583742      branch-misses             #    2.88% of all branches        
   1.001065623 seconds time elapsed

答案 2 :(得分:0)

您也可以查看uptime

正常运行时间显示以下信息的一行显示。当前时间,系统运行的时间,当前登录的用户数以及过去1分钟,5分钟和15分钟的系统负载平均值。