首页/云/Docker 容器速查/用 docker stats 验证限额生效
资源与安全50 条

用 docker stats 验证限额生效

对照限制值与实时用量:MEM LIMIT 列显示容器内存上限、PIDS 列显示进程数、CPU% 反映配额占用,是按压测试后的验收工具。

Docker 容器速查云更新于 2026-10-13

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 是瞬时采样。判断是否真的超限或容量不足,应结合压测期间的持续观察,而不是单次输出的一个峰值。

易错点

  • 把 CPU% 直接与 --cpus 的数值对比,忽略多核累计与采样区间,容易得出错误结论
  • 只看一次采样就判断容量是否充足,短时峰值与长期均值差异很大
  • LIMIT 列显示的是宿主总内存时,说明限额没有实际上到容器,先核对编排或运行参数
  • 容器已停止时默认不出现在输出里,排查退出原因要加 --all 或直接看 inspect

数据来源与参考

  • Docker 官方 CLI 参考:docker stats(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌