docker stats 默认每2秒刷新易漏短时尖峰,需用 watch -n 0.5/0.3 配合 --no-stream 和 --format 实现高频精准采样;长期监控应换用 cAdvisor+Prometheus+Grafana 或 Beszel。

直接用 docker stats 就能看,但默认设置容易错过短时尖峰——比如 CPU 突升到 98% 只持续 300 毫秒,它大概率不显示。关键不是“能不能看”,而是“看得准不准”。
基础查看:所有运行中容器的实时状态
在终端执行:
-
docker stats—— 默认每 2 秒刷新一次,显示容器名、CPU %(已归一化为单核百分比,多核下可超 100%)、MEM USAGE / LIMIT(比 MEM % 更可靠)、NET I/O、BLOCK I/O 等 - 只查某个容器:
docker stats my-app或docker stats a3f8b7(ID 缩写) - 已停止容器不会出现在默认输出里;加
-a参数可列出,但资源字段为空
抓瞬时峰值:高频采样 + 精简输出
默认刷新间隔实际采样周期约 5 秒,实测对短时尖峰漏捕率高达 63%。要逼近真实峰值,需手动提升频率:
- 用
watch -n 0.5每 0.5 秒执行一次快照:watch -n 0.5 'docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"' -
--no-stream防止流式输出混杂,确保每次都是独立快照 -
--format聚焦关键字段,避免干扰信息,方便肉眼识别跳变(如内存 200MB → 500MB,或 CPU 3% → 92%)
盯梢可疑容器:单独高频监控
发现某容器数值波动大,就把它单独拎出来盯:
watch -n 0.3 'docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" my-nginx'- 把刷新间隔压到 0.3 秒,配合精简字段,更容易捕捉毫秒级冲高
- 注意:过密采样会略微增加 Docker daemon 负担,生产环境不建议长期低于 0.5 秒
进阶补充:什么时候该换工具?
docker stats 是调试和快速排查的利器,但它不存历史、不告警、不画图:
- 需要记录趋势或做压测报告 → 用 Python 脚本调
docker stats --no-stream定时采集并写入 CSV - 要长期监控+图表+告警 → 上 cAdvisor + Prometheus + Grafana 组合
- 想开箱即用带 Web 界面 → Beszel 这类轻量平台,支持 Docker 指标、历史回溯和邮件/Webhook 告警


















