2009-08-26 72 views
29

如何从Linux中的shell中确定当前的CPU利用率?如何从shell中确定当前的CPU利用率?

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

cat /proc/loadavg 

输出:

0.18 0.48 0.46 4/234 30719 
+0

只是FYI,负载平均值不是CPU使用率,虽然它可能间接显示CPU使用率。这是一个数字,显示有多少进程在运行,但等待资源,无论是CPU还是磁盘或其他。 – hhaamu 2009-08-26 07:23:57

+0

我知道这一点。实际上,我评论了这个效应的答案。 – Joel 2009-08-26 07:25:35

回答

23

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

+0

如果这是真的,那么为什么太空的答案有效? – Brain2000 2013-11-13 17:49:13

+1

因为Space的答案不起作用。它会返回进程启动后的平均CPU使用率,而不是*当前* CPU使用率。 *这个*答案是正确的。 – scai 2016-08-12 11:11:56

-4

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

+1

谢谢 - 但没有办法从负载平均值计算CPU利用率。 – Joel 2009-08-26 07:21:52

+0

实际上,再次阅读源代码。我认为,平均负载是CPU利用率的派生物,因为您需要进行某种积分才能获得CPU利用率。没有更好的方法来解释这一点 - 只需使用源运气。 – elcuco 2009-08-26 09:00:39

4

也许这样的事情

ps -eo pid,pcpu,comm 

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

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

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

使用顶部:这将显示您的CPU使用PS统计

top -b -n 1 |grep ^Cpu 

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

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

另外,还可以在bash或Perl写一个小脚本读取的/ proc/STAT和计算CPU使用率。

+2

我们试过了,“top -b -n 1”的结果很不准确。 “top”的第一次迭代非常接近,可以给出10%而不是60. – 2009-08-28 11:51:07

+0

用-n> 1来增加迭代次数会更精确吗?你测试过这种情况了吗? – Christian 2012-05-04 06:45:07

+4

top对%CPU的计算不同于ps对%CPU的计算。看到这个答案http://unix.stackexchange.com/questions/58539/top-and-ps-not-showing-the-same-cpu-result – BozoJoe 2013-09-23 21:59:37

4

试试这个命令:

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/[email protected]/msg01690.html http://www.linuxhowtos.org/System/procstat.htm

8

命令uptime给你罗过去1分钟,5分钟和15分钟的广告平均数。