【问题标题】:filter output of vmstat and iostat过滤 vmstat 和 iostat 的输出
【发布时间】:2015-05-25 17:35:15
【问题描述】:

我正在使用 iostat 和 vmstat 收集统计数据,并定期运行每一个数据 10 秒。但是,我不想打印出整个输出。对于 iostat 我只想显示读写次数并将它们显示为一列。使用 vmstat,我只想显示空闲、缓存和缓冲区列。我怎样才能做到这一点?我使用的任何过滤器都会返回这个结果。 该系统在桌面终端和仅服务器版本上都是 ubuntu 12.04。它们使用 vmware 播放器运行。

ms total merged
0 0 0
0 0 0
0 0 0
0 0 0
758118 836340 1892
0 0 0
0 0 0

【问题讨论】:

  • 您需要告诉我们您使用的是什么操作系统。 vmstatiostat 的输出格式在不同的操作系统中是不同的。
  • 它在标签中。我在服务器版本和桌面版本上都使用 ubuntu 12.04
  • 好的,我看到了 Ubuntu 12.04 标签。没关系。 (但我宁愿在问题正文中看到它。)
  • 没问题。编辑问题现在说 os。
  • 太棒了。其他人应该很快就能回答这个问题,所以我不会花时间学习 Ubuntu 上的输出格式。不过在评论中:这是awk 的工作类型。

标签: bash statistics ubuntu-12.04 sar iostat


【解决方案1】:

假设输出格式如下:

> iostat -dx sda
Linux 3.13.0-45-generic (hostname obscured)     03/22/2015  _x86_64_    (8 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               7.02    30.64    4.48    8.32   174.81   789.29   150.64     0.86   67.48   10.76   98.01   1.06   1.36

> vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 3728772 969952 614416 29911568    3   13    22    99    1    4 48  5 47  0  0

您可以对iostat 执行以下操作(如果您愿意,可以每 10 秒执行一次):

device_name=sda # or whatever device name you want
iostat -dx ${device_name} | awk 'NR==4 { print $4 " " $5 }'

示例输出 (r/s w/s):

4.48 8.32

如果您需要大于 1 的计数,请执行以下操作:

iostat -dx ${device_name} ${interval} ${count} | awk 'NR==1 || /^$/ || /^Device:/ {next}; { print $4 " " $5 }'

示例输出(device_name=sda; interval=1; count=5):

10.24 8.88
0.00 0.00
0.00 2.00
0.00 0.00
0.00 0.00

您可以为vmstat 执行以下操作(如果您愿意,可以每 10 秒执行一次):

vmstat | awk 'NR==3 {print $4 " " $5 " " $6}'

示例输出 (free buff cache):

969952 614416 29911568

【讨论】:

  • 设备名称是什么意思?我的用户名?如果我这样做iostat -dx 1 10${device_name} | awk 'NR==4 { print $4 " " $5 }' 它仍然只打印一次。有什么想法吗?
  • @paul 设备名称,顾名思义,是您要收集统计信息的设备的名称。由于您不知道它是什么,我假设您只有一个设备;那么很可能是sda。为什么它打印一次:因为你没有告诉我你需要一个大于 1 的计数。你说你每 10 秒运行一次,所以我假设你每 10 秒运行一次计数。查看更新的答案。
  • 我现在已经格式化了。为什么这告诉我该文件不存在但它在 vmstat 上工作正常?
  • 好的,我已经用你的编辑尝试过它并且它运行但是当我写入文件时,它告诉我文件不存在并且这是一个致命错误 - 我的代码 iostat -dx ${sda} $INT $CNT | awk 'NR==1 || /^$/ || /^Device:/ {next}; { print $4 " " $5 }' > ioStressDebian_$D.log & sleep 5 && stress --io $cores --timeout $seconds_to_run echo "This file will be saved to ioStressDebian_$D.log" sleep 5 cat ioStressDebian_$D.log sleep 10;; 错误awk: cmd. line:1: fatal: cannot open file ioStressDebian_March.22.log' for reading (No such file or directory)
  • @paul 我相信我刚才说了一些愚蠢的话。请忽略这一点。关于您的问题:${sda} 是错误的,现在只需将其替换为 sda,因为我不想教 Bash。另外,请给我一个最小的例子来说明你是如何得到错误的,变量被替换为它们的对应值。我不想调试这个(语法错误)巨大的质量。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
相关资源
最近更新 更多