【问题标题】:Bash-Command to get the current network bandwith usage and CPU UsageBash-Command 获取当前网络带宽使用情况和 CPU 使用情况
【发布时间】:2024-01-23 04:34:01
【问题描述】:

我需要一些命令行 sn-ps 来获取当前 CPU 使用率(百分比)和当前网络带宽使用率。

为了获取我找到的 CPU-Usage 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-Usage 意味着所有内核都在 100% 但是我怎样才能有超过 400% 的使用率呢?甚至,如果 htop 说平均 CPU 使用率约为 3 - 5%

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

非常感谢您的帮助 :)

【问题讨论】:

    标签: linux bash unix ubuntu console


    【解决方案1】:

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

    【讨论】:

    • 我收到 -r--r--r-- 1 root root 0 Jan 10 15:08 /proc/net/dev 。这是否意味着我的机器现在没有传输任何数据?谢谢,祝大家好运。
    • 不确定这是否是一个讽刺的帖子(?),但如果你 cat /proc/net/dev 你会看到系统中设备的统计数据。
    • 无意讽刺。感谢cat ... 的提示。祝大家好运。
    【解决方案2】:

    尝试使用命令 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 本身的启动。您需要长时间运行监视器,然后才能开始使用它为您提供的值。

    【讨论】:

    • 我同意您对 CPU 的评论,正如 AIX 实用程序 nmon 的作者所说,~“如果您将 CPU 测试分成非常小的部分,您将看到一个进程要么在 0% CPU 上达到 100%。介于 %s 之间的只是较长时间段的平均值”。 ALOS,是否有计算“系统负载”的实用程序?感谢您的任何见解!
    • uptime 打印系统负载。我不确定它是如何计算的;我猜它是从某个地方的/proc/sys 获取的。
    • 那么网速本身就没有可能吗?那我就得自己算了。我知道只有 CPU 值并不能告诉您有关快速工作的任何信息。但是,如果您的 CPU 负载大部分时间都保持在 100%,它可能会告诉您,CPU 是一个瓶颈。以及 fest 网络连接并不意味着您可以更快地传输数据(慢速 HDD 等)。所以请给我一个提示,如何获得当前的 CPU 负载(所有内核的平均值)(请不要 1 分钟的平均负载,它不够精确) - 谢谢
    • 速度始终是随时间变化的距离。因此,您无需时间就获得 CPU 负载的请求是没有意义的。在任何给定时刻,CPU 负载要么为 100%,要么为 0%。您总是需要读取几个值并计算特定时间范围内的平均值。也就是说,atop 做你想做的事。它可以在 shell 中监视系统的状态或提取有趣的值并将它们写入文件。
    • 然后我需要平均负载超过 1 秒。我无法使用 atop,因为我无法将 htop 中显示的数字提取到我的 bash 脚本中。或者我可以这样做吗?我在atoptool.nl没有找到这个@
    最近更新 更多