docker stats 是 docker 原生命令,用于实时监控容器 cpu % 和 mem usage / limit,默认 2 秒刷新易漏捕瞬时峰值(实测漏捕率约 63%),需用 watch -n 0.5 配合 --no-stream 和 --format 提升采样精度并聚焦关键字段。

docker stats 是 Docker 原生命令,用于实时监控容器资源使用情况。它没有“瞬时峰值”模式,但可通过高频采样 + 后续分析,逼近真实峰值;默认刷新间隔为 2 秒(实际采样周期约 5 秒),短时尖峰存在漏捕可能(实测漏捕率约 63%)。要有效捕捉 CPU 与内存的瞬时高峰,需结合命令参数、刷新策略和简单外部工具。
明确一点:Docker 不提供“峰值自动标记”功能,所有峰值都需靠多次快照比对或外接工具识别。
如何用 docker stats 查看所有容器的 CPU 和内存实时变化
直接运行以下命令,即可持续输出所有正在运行容器的 CPU % 和 MEM USAGE / LIMIT:
docker stats
输出中关键字段含义:
- CPU %:已归一化为单核百分比(多核系统下可超 100%)
- MEM USAGE / LIMIT:实际内存用量与上限值(比 MEM % 更可信)
-
MEM %:仅当容器启动时设了
--memory限制才具参考价值;未设限时该值趋近于 0,不可信
⚠️ 注意:已停止容器默认不显示;如需包含已退出容器,加
-a或--all参数,但它们的数据始终为空。
Docker Image Puller下载使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
捕捉更敏感的瞬时波动(接近峰值)
默认 2 秒刷新不够密集,可通过 watch 配合 --no-stream 提升采样频率(最小约 0.5 秒):
watch -n 0.5 'docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"'
-
-n 0.5表示每 0.5 秒执行一次快照 -
--no-stream确保每次只取当前值,避免流式输出干扰 -
--format精简输出,聚焦目标字段,便于肉眼识别突增
你可手动观察几秒内哪一行数值跳变明显(如 CPU % 从 2% 突增至 95%,或 MEM USAGE 在 100ms 内增长 300MB),即为瞬时峰值迹象。
快速定位高负载容器并持续盯梢
若发现某容器疑似频繁冲高,可单独监控它,减少干扰:
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}" my-app
再配合 watch:
watch -n 0.3 'docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" my-app'
补充建议:让峰值判断更可靠
- 容器必须启动时设置内存限制(如
docker run --memory=1g nginx),否则MEM %无意义,MEM USAGE / LIMIT才是判断是否逼近 OOM 的依据 - 若需长期记录峰值、绘图或告警,
docker stats不适合——应搭配 cAdvisor + Prometheus + Grafana 组合 - 对极短脉冲(docker stats 无法捕获,此时需进入容器用
perf或pidstat -u 1等系统级工具深入分析
不复杂但容易忽略











