Bash-Command获取当前网络带宽使用率和CPU使用率

时间:2013-01-10 12:59:39

标签: linux bash unix ubuntu console

我需要一些命令行代码段来获取当前的CPU使用率(以百分比表示)和当前网络带宽的使用情况。

获取我找到的CPU使用情况top -bn1 | grep "Cpu(s)" 但它总是给我

  

%Cpu(s):12,3 us,3,6 sy,0,0 ni,83,7 id,0,3 wa,0,0 hi,0,0 si,0,0 st

此命令给出的数字永远不会改变。我试图将服务器设置为负载很重,我也有83.7%的空闲时间。

我发现ps aux|awk 'NR > 0 { s +=$3 }; END {print "cpu %",s}' 这些值正在发生变化,看起来不错,但我得到了像

这样的值
  

403.8

     

407.3

     

524.6

     

553.2

我不知道,这些价值观意味着什么 我的计算机中有4个核心,所以我预计400%的CPU使用率意味着所有核心都在100% 但是如何使用超过400%?甚至,如果htop说平均CPU使用率约为3 - 5%

对于网络流量监视器,我没有找到任何可用的东西。 我只需要以kbps为单位的数字输入/输出就可以在另一个程序/脚本中使用它们

非常感谢你的帮助:)

2 个答案:

答案 0 :(得分:2)

对于网络使用,您可以直接从/proc/net/dev轮询数据。

答案 1 :(得分:1)

尝试使用uptime命令,它可以为您提供过去1分钟,5分钟和15分钟的正常运行时间和平均负载。

可以在文件/sys/class/net/$1/statistics/rx_bytes/sys/class/net/$1/statistics/tx_bytes

中找到带宽

您应该记住当前值,并在一秒钟后再次查看以获取当前带宽使用情况。

关于负载的一个词:很多人认为CPU使用率是一个有用的衡量标准。那不对。很容易有一个系统,许多进程正在等待数据(网络,磁盘等),但由于它们正在等待,CPU负载将很低。如果你试图在这样的系统上工作,它仍然会感到迟钝。

因此系统负载对于系统“忙”的程度来说要好得多。

你应该看看像atop这样的工具,它们会不断监视系统,并为你提供历史数据,比如过去占用CPU的过程。 (intro

编辑 top -bn1 | grep始终打印相同结果的原因是因为您正在测量top本身的启动。您需要在较长时间内运行监视器,然后才能开始使用它为您提供的值。