我执行 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 站大佬给点指导?或者告诉我去看那些资料可以获取到这个信息?
跪谢
下个 nmon 试试?
为什么我用···,md 语法没生效--
因为你用了中文的·而不是`,所以格式没出来。
汗颜
我就是用 cpulimit -p 47380 -l 10 这种,想限制某个进程不要占满 cpu,然后发现整个多核状态很困扰
load avergage 并不一定和 cpu 负载对应 因为在某一个版本的 linux 修改中 将硬盘 io 这些因素也考虑了进去 你如果去放个 IO 量大的服务上去压测可以随便压到 100 多
平均负载和 CPU 使用率没有必然的关系。 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃的进程数。一般不可中断状态的进程,IO 进程为主。 -- 推荐资料,你可以看看极客时间 Linux 性能优化实战 这门课程,讲了很多有关性能方面的知识和实战技巧。 -- 如果看起来有难度的话,建议补下操作系统 进程管理方面的知识。
谢谢,我明天看一下
36 核满载 是 3600%
你研究方向弄错了。你应该去从源码分析。
按 1
@laminux29 什么意思?看 linux 内核源码么?
Load Average 三个值,分别是最近 1 分钟、5 分钟、15 分钟的平均负载值。
值代表的意思是当前有多少个任务在等待被处理。如果接近 0 就代表现在系统负载很低,不会有任务堆积;越高就代表任务出现了堆积。
但是对于多(逻辑)核 CPU 来说,它能同时完成多个任务;比如 8 核心 CPU,当瞬时负载 16 、且没有新的任务加入、且不存在其他瓶颈的情况下,理想情况下 CPU 处理完手里的所有任务可以直接从等待的任务里拿走 8 个去处理,将负载从 16 降为 8 。所以一般来说,负载达到 CPU 总核心数代表 100%满载,超过就是过载,低就是空载。
这是个系统宏观综合负载的表达,不代表系统中某一个组件的性能情况,比如内存、磁盘、网络、设备等短板也都会导致任务不能尽快完成,造成任务堆积,此时 CPU 可能还在空转,但对于系统来说可能已经过载。
想要解决过载问题的话,还是得看系统各个资源的具体情况。
谢谢回复。所以 36 核,如果 load 的 1 分钟对应的值是 36 就是满载,它和 cpu 也不强相关,因为有时候这个值靠近 36,但是下面显示的 cpu 占有率加起来并不是 3600%,我想知道,如果某一个进程对应后面的值是 101%,它是指占有的 36 核 cpu 的总量,那我怎么知道它占的各个 cpu 是多少呢?还是说我其实不需要关心这个,对于系统来说它是统一调度者 36 核的?
每个进程的%CPU 值代表占用 CPU 计算时间,100%相当于 1 个核心的全部计算时间,所以多线程可能会导致这个超过 100%,但 100%并不代表完全在用某 1 个核心,操作系统会调度所有的核心,使用成熟的算法最大化资源的利用效率,除非使用了某种绑定机制强制绑定一些核心使用。
所以你不需要关心具体是哪个核心。