Performance 仅从顶部检索i/o等待时间

Performance 仅从顶部检索i/o等待时间,performance,bash,io,Performance,Bash,Io,我想运行一个shell脚本iff。等待i/o设备所花费的时间超过了top定义的某个阈值,比如70%。我打算每隔n个间隔,比如说每1分钟或每5分钟,由cron对此进行一次检查。尽管阅读了top手册,我还是找不到如何让它只显示%wa然后退出。有什么建议吗? 谢谢 这就是我迄今为止所尝试的: WA=$(top -n1 |awk -F, 'NR==3 {print $5}') tr -d "[:alpha:]" <<< $W 当 这些都不适合输入if-gt;fi条件语句-我就是搞不懂

我想运行一个shell脚本iff。等待i/o设备所花费的时间超过了top定义的某个阈值,比如70%。我打算每隔n个间隔,比如说每1分钟或每5分钟,由cron对此进行一次检查。尽管阅读了top手册,我还是找不到如何让它只显示%wa然后退出。有什么建议吗? 谢谢

这就是我迄今为止所尝试的:

WA=$(top -n1 |awk -F, 'NR==3 {print $5}')
tr -d "[:alpha:]" <<< $W


这些都不适合输入if-gt;fi条件语句-我就是搞不懂这里发生了什么

如果您只想从top命令打印
%wa
,可以使用以下命令:

top -n1 |awk -F, 'NR==3 {print $5}'

这里的问题是,输出包含很少用于着色的转义序列。这就产生了问题。一种解决方法是使用
-b
选项

$ top -bn2 |awk -F, 'NF==8 {print $5}'|tail -n1|tr -d '[[:alpha:]] '
3.8
此处
-b
选项将导致
top
以批处理模式运行,因此不会输出特殊转义序列

要删除单词
wa
,您可以使用
tr-d'[[:alpha:]'
删除输出中的任何字母字符

希望这能解决问题。

尝试以下方法:

这将删除顶部输出中的空格和
%wa

 top -n1 |awk -F, ' NR==3 { gsub(/ /, "", $5); gsub (/%.*/,"",$5); print $5}'
说明:

gsub(//,“”,$5)
删除第五个字段中的空格,即
%wa


gsub(/%.*/,“”,$5)
删除
%

后的所有字符您的问题解决了吗?没有。我现在遇到了一个问题,即从顶部开始的第一次读取总是14.9%。这是因为当我运行top时,它总是在第一个区间读取14.9%,然后再上升到我认为的任何预期值范围。因为我想在等待时间很长的时候运行脚本,这对我没有帮助。在我的家用计算机上,top总是在第一个间隔内为wa返回1.3%,所以这可能是特定于机器的。不知道现在该怎么办。也许在许多时间间隔内取平均负载一些如何?谢谢,这是最优雅的更新问题解决方案。但是,top在其第一个区间中始终为%wa返回14.9%。在我的家用机器上,无论每台机器在做什么,它在第一个间隔内总是返回1.3%。因为我需要在等待时间很长的时候运行脚本,所以我目前无法解决我的问题。通常情况下,top、sar和其他实用程序会在第一次输出时提供累积值。后续输出将具有当前值。我已经更新了命令,以便打印第二次输出的值。如果需要获得指定时间间隔(如10秒、1分钟等)的平均值,还需要添加一件事。。然后使用
-d
选项,如
top-bn2-d10
。这将输出10秒间隔内发生的io等待。
top -n1 |awk -F, 'NR==3 {print $5}'
$ top -bn2 |awk -F, 'NF==8 {print $5}'|tail -n1|tr -d '[[:alpha:]] '
3.8
 top -n1 |awk -F, ' NR==3 { gsub(/ /, "", $5); gsub (/%.*/,"",$5); print $5}'