CPU 使用服务器和监控信息

CPU Usage Server and Monitoring info

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

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

查看问题我发现了一些东西并尝试了它:

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

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

我还尝试从 iostat 执行 100-idle

  1. 这在多 cpu/multi 核心系统上真的正确吗?
  2. 使用正常运行时间的 cpu 负载计算 cpu 总使用量是否正确?

使用代码我得到了单核的平均值,而我需要一个总 CPU 的结果,用在 % 问候, 谢谢

您最好完全在 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" }'

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

您也可以查看 uptime

Uptime 一行显示以下信息。当前时间、系统已运行多长时间 运行、当前登录用户数以及过去 1、5 和 15 分钟的系统平均负载。

如果您想获得任何详细的统计数据,您也可以使用 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