文章

Docker 性能分析

Linux 系统性能分析递进到 Docker 性能分析

Docker 性能分析
未更新完

1. Docker 容器性能监控的分层认知

在讲工具之前,先明确一个关键前提

容器性能 ≠ 主机性能

容器的资源统计,本质来自 Linux cgroup + namespace,而不是传统的 top / vmstat / iostat

监控能力可分为 4 层:

层级 能看到什么 典型工具
L0 容器资源汇总 docker stats
L1 cgroup 精细指标 cAdvisor
L2 历史 + 可视化 Prometheus + Grafana
L3 系统调用 / 行为 Sysdig / eBPF
L4 应用指标 应用自身埋点

你给的方案基本覆盖 L0 → L3,非常完整。


2. docker stats —— 容器监控的“入口工具”

2.1. 原理

docker stats 直接读取 Docker Engine 维护的 cgroup 统计信息

  • /sys/fs/cgroup/cpu/docker/<id>/
  • /sys/fs/cgroup/memory/docker/<id>/

并做一次简单聚合展示。

2.2. 能看什么

1
docker stats --no-stream
指标 说明
CPU % 容器 CPU 使用率(已考虑多核)
MEM USAGE 当前内存 / 限制
NET I/O 网络收发
BLOCK I/O 磁盘读写

⚠️ CPU% 计算方式

容器 CPU 时间 / 宿主总 CPU 时间 所以多核机器上可能 >100%

2.3. 适用场景

✅ 本地调试 ✅ 临时排查“哪个容器吃资源” ❌ 不适合线上长期监控

2.4. 明确的局限

  • ❌ 无历史
  • ❌ 无告警
  • ❌ 无 per-process(看不到容器内部进程)

👉 结论:只能作为“第一眼工具”


3. cAdvisor —— Docker 容器监控的事实标准

3.1. cAdvisor 是什么

Google 开源的 Container Advisor

专门从 cgroup + fs + netns 采集容器级别资源指标

Kubernetes 早期版本 内置就是 cAdvisor


3.2. 启动参数为什么这么写(重点)

1
2
3
4
5
6
7
8
9
docker run -d \
  --name cadvisor \
  --privileged \
  --volume /:/rootfs:ro \
  --volume /var/run:/var/run:ro \
  --volume /sys:/sys:ro \
  --volume /var/lib/docker/:/var/lib/docker:ro \
  --publish 8080:8080 \
  gcr.io/cadvisor/cadvisor:latest

逐项解释(非常关键):

参数 作用
--privileged 读取 cgroup / proc
/sys CPU / memory / blkio
/var/lib/docker 容器元数据
/var/run docker.sock
/ 文件系统容量统计

⚠️ 这是“只读挂载”,风险可控


3.3. 能看到哪些核心指标

CPU

  • 使用率(按核)
  • throttling(是否被限速)

内存

  • RSS
  • Cache
  • Limit
  • OOM Kill 次数(非常重要)

网络

  • rx / tx bytes
  • packets / drops

磁盘

  • read/write bytes
  • IOPS

3.4. cAdvisor 的定位

不能
精确容器资源 应用 QPS
Prometheus Export 延迟、错误率
OOM 诊断 业务 SLA

👉 结论资源层最优解


4. Prometheus + Grafana —— 生产级必选

4.1. 典型架构

1
[cAdvisor] ---> [Prometheus] ---> [Grafana]
  • cAdvisor:采集
  • Prometheus:存储 + 查询
  • Grafana:可视化 + 告警

4.2. 关键指标示例(PromQL)

# 容器 CPU 使用率
rate(container_cpu_usage_seconds_total[5m])

# 容器内存使用
container_memory_working_set_bytes

# OOM 次数
container_oom_events_total

4.3. 为什么这是“生产方案”

✅ 有历史 ✅ 可告警 ✅ 可容量规划 ✅ 可做 SLO / 趋势分析

5. Sysdig / Falco —— 行为级、内核级分析

5.1. Sysdig 在看什么

它不是“资源监控”,而是:

系统调用级别的行为分析

基于:

  • 内核模块(旧)
  • eBPF(新)

5.2. 示例命令的含义

1
sysdig -pc cont.id=abc123 and evt.type in (open,read,write,connect)

= 只看某个容器的:

  • 文件打开
  • IO 读写
  • 网络连接

5.3. 适用场景(非常明确)

✅ 容器异常行为 ✅ 安全审计 ✅ “容器为什么突然卡死”

❌ 日常资源监控

6. ctop —— 人类友好的实时工具

6.1. 本质

  • 基于 Docker API
  • 类似 htop,但对象是 container

6.2. 特点

优点 缺点
实时交互 无历史
快速定位 不适合线上
人性化 只是 UI

👉 结论:开发 / 运维的“增强版 docker stats”

7. Docker 使用国内镜像源(生产必配)

7.1. 官方推荐方式(daemon.json)

编辑:

1
2
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

推荐配置(稳定)

1
2
3
4
5
6
7
8
9
10
11
12
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

重启 Docker:

1
2
sudo systemctl daemon-reexec
sudo systemctl restart docker

7.2. 验证是否生效

1
docker info | grep -A 5 "Registry Mirrors"

7.3. 重要说明(现实情况)

镜像源 现状
阿里云 需登录
中科大 稳定
腾讯云 稳定
网易 稳定

⚠️ gcr.io 镜像(如 cAdvisor) 建议:

1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/cadvisor:v0.49.1
本文由作者按照 CC BY 4.0 进行授权