【问题标题】:Get CPU idle percentage for each core from dstat for variable amount of cores从 dstat 获取每个内核的 CPU 空闲百分比,以获得可变数量的内核
【发布时间】:2017-01-17 21:37:47
【问题描述】:

我有超过 100 台服务器,都使用不同的 CPU,可能有 2 到 16 个内核。

我可以通过以下命令获取每个核心的空闲 CPU(dstat 安装在所有服务器上):

dstat -c -C 0,1,2,3,4,5,6,7  --noheaders --nocolor --noupdate 3 1

我知道执行时的核心数量,因此进入 -C 的核心数量会有所不同。输出如下:

-------cpu0-usage------ -------cpu1-usage------ -------cpu2-usage------ -------cpu3-usage------ -------cpu4-usage------ -------cpu5-usage------ -------cpu6-usage------ -------cpu7-usage------
usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq
  5   3  90   0   0   2:  4   3  91   0   0   2:  4   3  91   0   0   2:  6   4  88   0   0   2:  2   1  96   0   0   1:  2   1  96   0   0   1:  2   1  96   0   0   1:  7   5  75   0   0  13
  3   1  95   0   0   1:  2   1  96   0   0   0:  5   2  93   0   0   1:  2   1  96   0   0   1:  1   0  99   0   0   0:  1   1  97   0   0   1:  1   0  98   0   0   0: 23  16  16   0   0  45

我需要从最后一行“提取”每个核心的 idl 值,并以逗号分隔的格式将其吐出。所以从上面的数据集中,我想得到以下输出:

95,96,93,96,99,97,98,16

我的 grep/awk-foo 很差,有人可以帮忙吗?

【问题讨论】:

    标签: awk grep cpu-usage


    【解决方案1】:
    $ awk '{out=""; for (i=3;i<=NF;i+=6) out = out (i>3?",":"") $i} END{print out}' file
    95,96,93,96,99,97,98,16
    

    【讨论】:

      【解决方案2】:

      使用tail -n1 获取输出的最后一行。听起来您需要从第 3 列开始的每 6 列? awk 中的 for 循环可以做到这一点。然后根据需要使用tr 将换行符更改为逗号:

      yourcommand | tail -n1 | awk '{for (i=3; i<=NF; i+=6) print $i }' | tr '\n' ','
      

      【讨论】:

      • 谢谢,几乎可以了。如何从第 3 列开始?
      • 在 awk 命令中应该是 i=3。已在答案中修复。
      • 这将在行尾添加一个尾随逗号并产生没有终止换行符的输出,因此结果不是 POSIX 文本“文件”,因此 YMMV wrt 任何后续命令都能够做吧。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2011-03-18
      • 2016-05-25
      • 2015-05-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多