大佬们,求教一个多核 cpu top 的问题

2020-12-01 15:51:37 +08:00
 arcaitan

我执行 top 命令是类似这个样子: ··· (sdk) [xxx ~]$ top top - 15:46:23 up 81 days, 6:09, 7 users, load average: 15.03, 14.66, 20.48 Tasks: 760 total, 20 running, 715 sleeping, 25 stopped, 0 zombie %Cpu(s): 35.7 us, 18.1 sy, 5.4 ni, 40.0 id, 0.2 wa, 0.0 hi, 0.1 si, 0.4 st KiB Mem : 22260643+total, 15450846+free, 18399780 used, 49698192 buff/cache KiB Swap: 0 total, 0 free, 0 used. 20240766+avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9055 xxxxxxxx 20 0 3235836 311676 35476 S 47.0 0.1 0:01.42 xxx 8836 xxxxxxxx 20 0 3235836 309780 35504 S 44.4 0.1 0:01.40 xxx ···

已经知道机器是 36 核的,

我查了一下,它物理 cpu 个数是 2,每个物理 cpu 的核数是 18,

有没有大佬告诉我怎么看这个 load avergage,和下面的%CPU 占用率和这个 cpu 核数的对应关系?

网上搜了半天没找到讲得清楚了,能不能求 v 站大佬给点指导?或者告诉我去看那些资料可以获取到这个信息?

跪谢

2240 次点击
所在节点    Linux
15 条回复
weizhen199
2020-12-01 15:54:37 +08:00
下个 nmon 试试?
arcaitan
2020-12-01 15:54:43 +08:00
为什么我用···,md 语法没生效--
Vegetable
2020-12-01 15:57:07 +08:00
因为你用了中文的·而不是`,所以格式没出来。
arcaitan
2020-12-01 16:03:38 +08:00
@Vegetable 汗颜
arcaitan
2020-12-01 16:04:41 +08:00
@weizhen199 我就是用 cpulimit -p 47380 -l 10 这种,想限制某个进程不要占满 cpu,然后发现整个多核状态很困扰
woshiaha
2020-12-01 16:07:21 +08:00
load avergage 并不一定和 cpu 负载对应 因为在某一个版本的 linux 修改中 将硬盘 io 这些因素也考虑了进去 你如果去放个 IO 量大的服务上去压测可以随便压到 100 多
lvzhiqiang
2020-12-01 16:44:32 +08:00
平均负载和 CPU 使用率没有必然的关系。 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃的进程数。一般不可中断状态的进程,IO 进程为主。 -- 推荐资料,你可以看看极客时间 Linux 性能优化实战 这门课程,讲了很多有关性能方面的知识和实战技巧。 -- 如果看起来有难度的话,建议补下操作系统 进程管理方面的知识。
arcaitan
2020-12-01 17:13:23 +08:00
@lvzhiqiang 谢谢,我明天看一下
dorothyREN
2020-12-01 18:21:10 +08:00
36 核满载 是 3600%
laminux29
2020-12-01 19:05:21 +08:00
你研究方向弄错了。你应该去从源码分析。
liuhuan475
2020-12-02 11:16:26 +08:00
按 1
arcaitan
2020-12-02 11:48:20 +08:00
@laminux29  什么意思?看 linux 内核源码么?
libook
2020-12-02 14:40:18 +08:00
Load Average 三个值,分别是最近 1 分钟、5 分钟、15 分钟的平均负载值。
值代表的意思是当前有多少个任务在等待被处理。如果接近 0 就代表现在系统负载很低,不会有任务堆积;越高就代表任务出现了堆积。

但是对于多(逻辑)核 CPU 来说,它能同时完成多个任务;比如 8 核心 CPU,当瞬时负载 16 、且没有新的任务加入、且不存在其他瓶颈的情况下,理想情况下 CPU 处理完手里的所有任务可以直接从等待的任务里拿走 8 个去处理,将负载从 16 降为 8 。所以一般来说,负载达到 CPU 总核心数代表 100%满载,超过就是过载,低就是空载。

这是个系统宏观综合负载的表达,不代表系统中某一个组件的性能情况,比如内存、磁盘、网络、设备等短板也都会导致任务不能尽快完成,造成任务堆积,此时 CPU 可能还在空转,但对于系统来说可能已经过载。

想要解决过载问题的话,还是得看系统各个资源的具体情况。
arcaitan
2020-12-02 15:37:11 +08:00
@libook  谢谢回复。所以 36 核,如果 load 的 1 分钟对应的值是 36 就是满载,它和 cpu 也不强相关,因为有时候这个值靠近 36,但是下面显示的 cpu 占有率加起来并不是 3600%,我想知道,如果某一个进程对应后面的值是 101%,它是指占有的 36 核 cpu 的总量,那我怎么知道它占的各个 cpu 是多少呢?还是说我其实不需要关心这个,对于系统来说它是统一调度者 36 核的?
libook
2020-12-02 15:51:52 +08:00
@arcaitan 每个进程的%CPU 值代表占用 CPU 计算时间,100%相当于 1 个核心的全部计算时间,所以多线程可能会导致这个超过 100%,但 100%并不代表完全在用某 1 个核心,操作系统会调度所有的核心,使用成熟的算法最大化资源的利用效率,除非使用了某种绑定机制强制绑定一些核心使用。
所以你不需要关心具体是哪个核心。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX