docker stats 是什么
docker stats 实时查看容器的资源使用:CPU 百分比、内存使用与上限、网络 IO、块设备 IO 以及进程数。默认进入全屏刷新模式,按 q 退出;加 --no-stream 只输出一次快照,适合写进巡检脚本。它是容器维度的视图,和宿主维度的 top、iostat 配合才能完整判断压力来源。
基本信息
| 监控指标 | CPU%、内存使用与上限、网络 IO、块设备 IO、PIDs |
|---|---|
| 交互方式 | 默认全屏刷新,q 退出;--no-stream 单次输出 |
| 格式化输出 | --format 支持模板变量,便于脚本解析与落库 |
| 与 top 区别 | stats 是容器维度资源,top 是进程维度列表 |
| 局限 | 宿主整体压力如 IO 等待需配合 iostat 与 top 判断 |
典型使用场景
- 排查卡顿:确认是某个容器吃满 CPU 还是整体 IO 等待
- 验证限额:给容器配了内存上限后,确认实际使用是否触顶
- 发布观察:新版本上线后对比资源曲线,判断有无内存泄漏迹象
- 容量规划:按实际使用量调整 CPU 与内存限额,减少资源浪费
- 巡检脚本:用 --no-stream 加 --format 采集快照并上报监控系统
使用示例
使用示例
docker stats # 全屏实时刷新,q 退出
docker stats --no-stream # 只输出一次快照
# 表格化输出关键列,适合写进巡检脚本或定时任务
docker stats --no-stream --format \
"table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"
docker stats --no-stream $(docker ps -q) # 限定容器范围输出逐列读法
| 列 | 含义 | 异常表现 |
|---|---|---|
| CONTAINER | 容器名或 ID | — |
| CPU % | 占单核的百分比,多核可超 100 | 长期贴近核数上限说明 CPU 打满 |
| MEM USAGE/LIMIT | 内存使用量与上限 | 上限显示为宿主总量说明没设限额 |
| MEM % | 内存使用比例 | 持续接近上限随时可能被 OOM |
| NET I/O | 累计收发的网络流量 | 突增说明有大批量传输或异常外联 |
| BLOCK I/O | 累计读写磁盘量 | 持续增长说明落盘频繁,可能拖慢宿主 |
容器未设内存上限时,MEM LIMIT 显示宿主总量,MEM% 会失真。生产环境务必用 -m 设置限额,否则单个容器可以拖垮整台机器。
MEM USAGE 包含文件缓存,评估 OOM 风险时更要看长期趋势与容器实际工作集;内存持续上涨且不回落,通常是应用侧泄漏而非缓存。