docker stats 是什么
docker stats 实时显示容器的资源占用:CPU 百分比、内存用量与上限、网络与块设备流量、进程数。它的价值在于「对照」——把 MEM USAGE 与 LIMIT 放在同一行,一眼就能判断限额是否按预期挂上、用量离上限还有多少余量,因此常被当作资源限制调整后的验收工具。
基本信息
| 语法 | docker stats [--no-stream] [--format 模板] [容器…] |
|---|---|
| 常用选项 | --no-stream 单次采样、--all 含已停止容器、--format 自定义列 |
| 默认行为 | 交互式刷新,持续输出到出口 |
| 关键列 | CPU% / MEM USAGE / LIMIT / MEM% / NET I/O / BLOCK I/O / PIDS |
| 服务场景 | docker compose stats 汇总项目内服务 |
| 适用平台 | Linux 容器;Windows 容器部分列含义不同 |
典型使用场景
- 限额验收:确认 LIMIT 列显示的是配置值而不是宿主总内存
- 容量观察:压测期间记录用量变化,判断余量够不够
- 排查反复重启:发现用量贴近上限,指向内存限制过紧
- 定位异常进程数量:PIDS 突然飙升往往意味着进程泄漏
- 编写监控脚本:用 --no-stream 与 --format 输出可解析的文本
取值与对照
取值与对照
# 单次采样,适合脚本与人工核对
docker stats --no-stream
# 只要关心的列,便于粘贴到工单或报表
docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.PIDs}}'
# 只观察指定容器
docker stats --no-stream api db
# 与引擎侧配置对照:Memory 字段应等于编排里声明的上限
docker inspect -f '{{.HostConfig.Memory}} {{.HostConfig.NanoCpus}}' api输出逐列读法
| 列 | 含义 | 正常与异常 |
|---|---|---|
| CPU% | 采样间隔内的 CPU 占用 | 多核可超 100%;长期贴近配额说明算力吃紧 |
| MEM USAGE / LIMIT | 当前内存用量与上限 | 两者接近时随时可能 OOM |
| MEM% | 用量占上限比例 | 持续高于 80% 要关注 |
| NET I/O | 累计收发流量 | 突增需结合业务判断是否异常 |
| BLOCK I/O | 累计磁盘读写 | 异常高可能意味着频繁落盘或日志失控 |
| PIDS | 容器内进程数 | 只增不减往往意味着进程或线程泄漏 |
CPU% 是多核累计值:四核机器上的容器可能显示 380%。它与 --cpus 的数值不做简单比较,判断算力是否受限要看长期均值与配额比例。
stats 是瞬时采样。判断是否真的超限或容量不足,应结合压测期间的持续观察,而不是单次输出的一个峰值。