V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
arcaitan
V2EX  ›  Linux

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

  •  
  •   arcaitan · 2020-12-01 15:51:37 +08:00 · 2427 次点击
    这是一个创建于 1463 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我执行 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 站大佬给点指导?或者告诉我去看那些资料可以获取到这个信息?

    跪谢

    15 条回复    2020-12-02 15:51:52 +08:00
    weizhen199
        1
    weizhen199  
       2020-12-01 15:54:37 +08:00
    下个 nmon 试试?
    arcaitan
        2
    arcaitan  
    OP
       2020-12-01 15:54:43 +08:00
    为什么我用···,md 语法没生效--
    Vegetable
        3
    Vegetable  
       2020-12-01 15:57:07 +08:00
    因为你用了中文的·而不是`,所以格式没出来。
    arcaitan
        4
    arcaitan  
    OP
       2020-12-01 16:03:38 +08:00
    @Vegetable 汗颜
    arcaitan
        5
    arcaitan  
    OP
       2020-12-01 16:04:41 +08:00
    @weizhen199 我就是用 cpulimit -p 47380 -l 10 这种,想限制某个进程不要占满 cpu,然后发现整个多核状态很困扰
    woshiaha
        6
    woshiaha  
       2020-12-01 16:07:21 +08:00
    load avergage 并不一定和 cpu 负载对应 因为在某一个版本的 linux 修改中 将硬盘 io 这些因素也考虑了进去 你如果去放个 IO 量大的服务上去压测可以随便压到 100 多
    lvzhiqiang
        7
    lvzhiqiang  
       2020-12-01 16:44:32 +08:00
    平均负载和 CPU 使用率没有必然的关系。 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃的进程数。一般不可中断状态的进程,IO 进程为主。 -- 推荐资料,你可以看看极客时间 Linux 性能优化实战 这门课程,讲了很多有关性能方面的知识和实战技巧。 -- 如果看起来有难度的话,建议补下操作系统 进程管理方面的知识。
    arcaitan
        8
    arcaitan  
    OP
       2020-12-01 17:13:23 +08:00
    @lvzhiqiang 谢谢,我明天看一下
    dorothyREN
        9
    dorothyREN  
       2020-12-01 18:21:10 +08:00
    36 核满载 是 3600%
    laminux29
        10
    laminux29  
       2020-12-01 19:05:21 +08:00
    你研究方向弄错了。你应该去从源码分析。
    liuhuan475
        11
    liuhuan475  
       2020-12-02 11:16:26 +08:00
    按 1
    arcaitan
        12
    arcaitan  
    OP
       2020-12-02 11:48:20 +08:00
    @laminux29  什么意思?看 linux 内核源码么?
    libook
        13
    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
        14
    arcaitan  
    OP
       2020-12-02 15:37:11 +08:00
    @libook  谢谢回复。所以 36 核,如果 load 的 1 分钟对应的值是 36 就是满载,它和 cpu 也不强相关,因为有时候这个值靠近 36,但是下面显示的 cpu 占有率加起来并不是 3600%,我想知道,如果某一个进程对应后面的值是 101%,它是指占有的 36 核 cpu 的总量,那我怎么知道它占的各个 cpu 是多少呢?还是说我其实不需要关心这个,对于系统来说它是统一调度者 36 核的?
    libook
        15
    libook  
       2020-12-02 15:51:52 +08:00
    @arcaitan 每个进程的%CPU 值代表占用 CPU 计算时间,100%相当于 1 个核心的全部计算时间,所以多线程可能会导致这个超过 100%,但 100%并不代表完全在用某 1 个核心,操作系统会调度所有的核心,使用成熟的算法最大化资源的利用效率,除非使用了某种绑定机制强制绑定一些核心使用。
    所以你不需要关心具体是哪个核心。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1682 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 16:47 · PVG 00:47 · LAX 08:47 · JFK 11:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.