【问题标题】:How can I determine the current CPU utilization from the shell? [closed]如何从 shell 确定当前的 CPU 利用率? [关闭]
【发布时间】:2009-08-26 07:13:08
【问题描述】:

如何在 Linux 中通过 shell 确定当前的 CPU 利用率?

例如,我得到这样的平均负载:

cat /proc/loadavg

输出:

0.18 0.48 0.46 4/234 30719

【问题讨论】:

  • 仅供参考,平均负载不是 CPU 使用率,尽管它可能间接显示 CPU 使用率。这是一个数字,显示有多少进程正在运行但正在等待资源,无论是 CPU、磁盘还是其他。
  • 我知道这一点。事实上,我对这个效果的答案发表了评论。
  • 这是怎么回事?重复我可以理解,但题外话?
  • 无法回答问题,因为它已关闭,但请查看 vmstat,作为奖励,它也适用于 BSD。

标签: linux


【解决方案1】:

Linux 没有任何提供当前 CPU 利用率的系统变量。相反,您必须多次阅读/proc/statcpu(n) 行中的每一列都给出了总 CPU 时间,您必须随后读取它以获得百分比。请参阅this document 了解各个列的含义。

【讨论】:

  • 如果这是真的,那为什么 Space 的答案有效?
  • 因为 Space 的回答不起作用。它返回自进程启动以来的平均 CPU 使用率,而不是 当前 CPU 使用率。 这个答案是正确的。
【解决方案2】:

您可以使用topps 命令来检查CPU 使用率。

使用 top :这将显示 cpu 统计信息

top -b -n 1 |grep ^Cpu

使用 ps:这将显示每个进程的 % cpu 使用率。

ps -eo pcpu,pid,user,args | sort -r -k1 | less

另外,您可以在 bash 或 perl 中编写一个小脚本来读取 /proc/stat 并计算 CPU 使用率。

【讨论】:

  • 我们试过了,“top -b -n 1”给出了非常不准确的结果。 “top”的第一次迭代非常近似,可以给出 10% 而不是 60%。
  • 使用 -n > 1 增加迭代次数会更精确吗?你测试过这个案例吗?
  • top 计算 %CPU 与 ps 计算 %CPU 不同。看到这个答案unix.stackexchange.com/questions/58539/…
  • top -b -n 2|grep Cpu|tail -n 1|cut -d ' ' -f 7|cut -d '%' -f 1
【解决方案3】:

您需要对负载平均值进行几秒钟的采样并从中计算 CPU 利用率。如果你不确定什么,请获取“top”的来源并阅读它。

【讨论】:

  • 谢谢 - 但无法从平均负载计算 CPU 利用率。
  • 其实有,再次阅读源代码。我认为,平均负载是 CPU 利用率的导数,您需要进行某种积分才能获得 CPU 利用率。没有更好的方法来解释这一点 - 只需使用源 Luck。
【解决方案4】:

【讨论】:

  • 不幸的是,我需要它立即退出,以便解析输出。我希望 /proc 中有一个可以读取的文件。
  • @Joel:可以使用top命令读取cpu值并退出。将 -b 与顶部一起使用。
【解决方案5】:

试试这个命令:

cat /proc/stat

这将是这样的:

cpu  55366 271 17283 75381807 22953 13468 94542 0
cpu0 3374 0 2187 9462432 1393 2 665 0
cpu1 2074 12 1314 9459589 841 2 43 0
cpu2 1664 0 1109 9447191 666 1 571 0
cpu3 864 0 716 9429250 387 2 118 0
cpu4 27667 110 5553 9358851 13900 2598 21784 0
cpu5 16625 146 2861 9388654 4556 4026 24979 0
cpu6 1790 0 1836 9436782 480 3307 19623 0
cpu7 1306 0 1702 9399053 726 3529 26756 0
intr 4421041070 559 10 0 4 5 0 0 0 26 0 0 0 111 0 129692 0 0 0 0 0 95 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 369 91027 1580921706 1277926101 570026630 991666971 0 277768 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 8097121
btime 1251365089
processes 63692
procs_running 2
procs_blocked 0

更多细节:

http://www.mail-archive.com/linuxkernelnewbies@googlegroups.com/msg01690.html http://www.linuxhowtos.org/System/procstat.htm

【讨论】:

    【解决方案6】:

    也许是这样的

    ps -eo pid,pcpu,comm
    

    如果你喜欢解析,也许只看一些进程。

    #!/bin/sh
    ps -eo pid,pcpu,comm | awk '{if ($2 > 4) print }' >> ~/ps_eo_test.txt
    

    【讨论】:

    • 如果您想按进程名称汇总 CPU 使用率(例如,如果您运行的 chrome 会产生数十个同名进程),您可以使用 ps -eo pcpu,comm | awk '{if ($1 > 0.1) arr[$2]+=$1} END {for (key in arr) printf("%s\t%s\n", arr[key], key)}'。跨度>
    【解决方案7】:

    uptime 命令为您提供过去 1、5 和 15 分钟的平均负载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多