技术解析

linux 下的 top 和 htop 不尽相同,该相信谁?
0
2021-07-09 21:06:43
idczone

我跑了一个很费资源的程序,开始用top看的时候cpu利用率达到9x%,随后用htop看了以下,每核cpu的利用率倒是没超过50%,我该相信谁?

1  [||||||                                  6.8%]     Tasks: 33, 19 thr; 2 running
2  [||||||||||                             13.0%]     Load average: 1.01 0.66 0.28
3  [||||||||||||||||||||||||||||           36.4%]     Uptime: 00:04:34
4  [|||||||||||||||                        20.1%]
5  [|||||||||||||||||||                    24.8%]
6  [||||||||||||||||||                     23.8%]
7  [||||||||||||||                         17.7%]
8  [||||||                                  8.2%]
Mem[||||||                            432/7870MB]
Swp[                                       0/0MB]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1715 root       20   0  995M   99M  2676 S 93.0  1.3  4:05.50 /usr/local/unba/bin/probe
 1811 root       20   0  995M   99M  2676 S 33.0  1.3  1:16.48 /usr/local/unba/bin/probe
 1813 root       20   0  995M   99M  2676 S 29.0  1.3  0:59.18 /usr/local/unba/bin/probe
 1809 root       20   0  995M   99M  2676 S 13.0  1.3  0:46.68 /usr/local/unba/bin/probe
 1805 root       20   0  995M   99M  2676 S 13.0  1.3  0:45.78 /usr/local/unba/bin/probe
 1899 chenrui    20   0  156M  5044  1308 S  2.0  0.1  0:00.72 mosh-server new -s -c 0
 1560 root       20   0  249M  3776  1092 S  2.0  0.0  0:06.95 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
 1807 root       20   0  995M   99M  2676 S  2.0  1.3  0:05.11 /usr/local/unba/bin/probe
...

我用探针看的

都准,未必是同步的

top 是所有 cpu 的总和,htop 是每个 cpu 分开的
你把 htop 里面单个 cpu 的值加起来应该和 top 里面的差不多

应该都是对的。。
问题是怎么解读。。。
超线程算到谁头上?

LZ误解了,htop里面8个cpu平均18。和top里面的us+sy+si+hi差不多,所以不矛盾的。
此外,对于用户态的东西,htop一行对应一个线程,top一行对应一个进程,所以top里面你看到同样的多线程应用,top的比htop的高,甚至超过100,但所有线程加一起就和top里的一样多。
如果想了解硬件的真实负载可以安装powertop,他的数据有一部分来自cpu硬件内部的统计而不是操作系统。

Cpu(s): 3.1%us, 2.0%sy, 0.0%ni, 81.6%id, 0.2%wa, 0.1%hi, 12.9%si, 0.2%st
不是写着 81.6% idle 么,负载哪里超过一半了。
要是超过一半的话,怎么也不可能87.9%吧,至少400%了吧?


负载和占用率不是一个概念啊

top的时候你按一下数字键1,你就知道了

采样时间点不一样

都是从procfs中读出的数据,所以原始数据是一样的,只是数据读出时间和数据整合方式不同

如果楼主看完这篇:
http://server.51cto.com/sCollege-188250.htm
可以发现,CPU使用率仅仅是一个统计而已。
通过包含了每一种cpu使用情况时间的统计。
因此从不同时刻考虑cpu使用率有不同的统计结果。
最后希望能帮到楼主。

看来我得先理解一下linux的工作机制再过来提问,我现在还搞不清top中的那一行
```
Cpu(s): 3.1%us, 2.0%sy, 0.0%ni, 81.6%id, 0.2%wa, 0.1%hi, 12.9%si, 0.2%st
```
到底啥意思。


us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
id, idle : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor


谢谢,我想了解的不仅仅是字面的意思,我更想知道在什么样的情况下是cpu遇到了瓶颈,我估计除了top,还需要配合其它工具才能进行性能的调优。

多核平均和单核的区别。

数据地带为您的网站提供全球顶级IDC资源