首页 > 解决方案 > Docker Stats vs Linux ps vs 实际 CPU 利用率

问题描述

我想检查 docker 容器的 CPU 利用率。我的服务器配置如下:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
Stepping:              4
CPU MHz:               2500.000
BogoMIPS:              5000.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              1024K
L3 cache:              33792K
NUMA node0 CPU(s):     0-3

我使用了该docker stats命令,它显示 14.39% CPU 使用率。

CONTAINER ID        NAME                                                                           CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
4a0da79c0648        k8s_test-test-6b9c748fff-bcch5_default_2d80f075-6d77-11e9-b2a1-0267bc34ef6c_3   14.39%              130MiB / 15.06GiB   0.80%               0B / 0B             321MB / 16.4kB      10

然后我使用以下命令找到了容器的 PID:

docker inspect 4a0da79c0648 --format '{{.State.Pid}}, {{.ID}}'

然后使用 Linux 命令查找 CPU 使用率。

while sleep 1; do ps --no-headers -o '%cpu,%mem' -p 14188; done

输出如下:

Cpu   Mem
14.7  0.7
14.7  0.7
14.7  0.7

CPU利用率百分比的输出都不同。另外它与我的 4 CPU 机器相比如何,14% 的利用率意味着 680 milicpu 吗?是 1 CPU 14% 还是 4 CPU 14%?

标签: linuxdocker

解决方案


14% 的利用率意味着一个核心的 14%,即 140 毫核。所有 Linux 工具都显示与一个内核相关的 CPU 利用率。因此,如果您的应用程序使用两个内核 - 那么它使用 200% 的 cpu。此外,“一个核心”的定义可能会有所不同,具体取决于您是否启用了超线程。


推荐阅读