我跑了一个很费资源的程序,开始用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
...
使用了tmux分隔,所以下面的top信息跟htop是同屏显示的,时间是同步的。
top - 00:41:29 up 4 min, 2 users, load average: 1.01, 0.66, 0.28
Tasks: 175 total, 2 running, 173 sleeping, 0 stopped, 0 zombie
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
Mem: 8058904k total, 570824k used, 7488080k free, 55012k buffers
Swap: 0k total, 0k used, 0k free, 72820k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1715 root 20 0 995m 99m 2676 S 87.9 1.3 4:04.45 probe
33 root 20 0 0 0 0 S 44.9 0.0 0:32.22 ksoftirqd/7
13 root 20 0 0 0 0 R 37.1 0.0 0:28.72 ksoftirqd/2
17 root 20 0 0 0 0 S 7.8 0.0 0:33.92 ksoftirqd/3
1899 chenrui 20 0 156m 4916 1308 S 5.9 0.1 0:00.70 mosh-server
31 root RT 0 0 0 0 S 2.0 0.0 0:00.01 migration/7
42 root 20 0 0 0 0 S 2.0 0.0 0:00.13 events/7
1560 root 20 0 249m 3776 1092 S 2.0 0.0 0:06.91 rsyslogd
1922 chenrui 20 0 25992 1604 1072 S 2.0 0.0 0:00.04 tmux
1961 root 20 0 110m 2300 1240 S 2.0 0.0 0:00.31 htop
1979 chenrui 20 0 15028 1224 868 R 2.0 0.0 0:00.01 top
1 root 20 0 19232 1484 1192 S 0.0 0.0 0:01.13 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:29.03 ksoftirqd/0
...
1
Andy1999 2015-07-21 00:59:36 +08:00 via iPhone
我用探针看的
|
2
nine 2015-07-21 01:14:41 +08:00
都准,未必是同步的
|
3
AstroProfundis 2015-07-21 01:15:09 +08:00
top 是所有 cpu 的总和,htop 是每个 cpu 分开的
你把 htop 里面单个 cpu 的值加起来应该和 top 里面的差不多 |
4
ffffwh 2015-07-21 01:15:58 +08:00
应该都是对的。。
问题是怎么解读。。。 超线程算到谁头上? |
5
redsonic 2015-07-21 02:51:41 +08:00 3
LZ误解了,htop里面8个cpu平均18。和top里面的us+sy+si+hi差不多,所以不矛盾的。
此外,对于用户态的东西,htop一行对应一个线程,top一行对应一个进程,所以top里面你看到同样的多线程应用,top的比htop的高,甚至超过100,但所有线程加一起就和top里的一样多。 如果想了解硬件的真实负载可以安装powertop,他的数据有一部分来自cpu硬件内部的统计而不是操作系统。 |
6
msg7086 2015-07-21 06:13:15 +08:00
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%了吧? |
7
lujiajing1126 2015-07-21 08:30:20 +08:00 via Android
@msg7086
负载和占用率不是一个概念啊 |
8
maxbon 2015-07-21 08:31:43 +08:00 1
top的时候你按一下数字键1,你就知道了
|
9
xdeng 2015-07-21 08:48:35 +08:00
采样时间点不一样
|
10
Ranler 2015-07-21 09:02:48 +08:00
都是从procfs中读出的数据,所以原始数据是一样的,只是数据读出时间和数据整合方式不同
|
11
lijianying10 2015-07-21 09:53:38 +08:00
如果楼主看完这篇:
http://server.51cto.com/sCollege-188250.htm 可以发现,CPU使用率仅仅是一个统计而已。 通过包含了每一种cpu使用情况时间的统计。 因此从不同时刻考虑cpu使用率有不同的统计结果。 最后希望能帮到楼主。 |
12
ioiioi OP 看来我得先理解一下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 ``` 到底啥意思。 |
13
JamesRuan 2015-07-21 20:34:06 +08:00
@ioiioi
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 |
14
ioiioi OP @JamesRuan
谢谢,我想了解的不仅仅是字面的意思,我更想知道在什么样的情况下是cpu遇到了瓶颈,我估计除了top,还需要配合其它工具才能进行性能的调优。 |
15
jedihy 2015-08-03 07:48:17 +08:00
多核平均和单核的区别。
|