docker stats是轻量级实时监控命令,可查看运行中容器的cpu%、内存使用/上限、mem%、net i/o、block i/o和pids,每秒刷新;支持指定容器、--no-stream快照输出,但不适用于已停止容器且无历史数据。

监控容器的实时资源消耗与性能,核心是分层采集、多工具协同、指标可追溯。不能只靠一个命令看一眼,而要建立从单容器到集群、从瞬时值到历史趋势的完整视图。
用 docker stats 快速查看运行中容器的实时状态
这是最轻量、开箱即用的方式,适合开发调试或应急排查:
- 执行 docker stats 不加参数,可看到所有正在运行容器的 CPU %、内存使用量/上限、内存占比、网络 I/O、磁盘 I/O 和进程数(PIDS),数据每秒刷新
- 指定容器:如 docker stats nginx-app 或 docker stats abc123,聚焦目标
- 加 --no-stream 参数(例如 docker stats --no-stream mydb)只输出一次快照,适合脚本调用或日志记录
- 注意:它只对 running 状态的容器有效;停止的容器不会显示,也不保存历史数据
用 cAdvisor 深度采集容器级细粒度指标
cAdvisor 是 Google 开源的底层监控代理,能暴露容器真实的 CPU 时间、内存 RSS、页面故障、网络包统计等原生指标,是 Prometheus 的理想数据源:
- 启动方式简单:用 Docker 运行 cAdvisor 容器,挂载宿主机关键路径(/sys、/var/lib/docker、/proc 等),并映射端口(如 8080)
- 访问 http://localhost:8080/metrics 可直接看到文本格式的指标(符合 Prometheus 格式),比如 container_cpu_usage_seconds_total、container_memory_usage_bytes
- 它自动发现新创建的容器,支持历史数据回溯(默认保留 2 分钟,可通过参数延长),弥补 docker stats 的短板
用 Prometheus + Grafana 构建可持续的可视化监控体系
当容器数量增多、需要长期观察或联动告警时,必须引入时间序列数据库和可视化平台:
- Prometheus 定期从 cAdvisor(或 Kubernetes Metrics Server)抓取指标,存入本地 TSDB,支持按容器名、命名空间、标签等多维度筛选
- 用 PromQL 查询典型场景:如 avg by (container) (rate(container_cpu_usage_seconds_total[5m])) 查各容器 5 分钟平均 CPU 使用率;container_memory_working_set_bytes{container!="POD"} 查实际活跃内存
- Grafana 导入现成 Dashboard(如 cAdvisor 官方模板),一键展示 CPU/内存热力图、I/O 延迟分布、Pod 重启次数趋势等,比命令行更易发现异常模式
结合宿主机工具定位底层瓶颈
容器性能异常有时并非容器本身问题,而是宿主机资源争抢或内核限制所致:
- 用 top 或 htop 看整体 CPU 负载和哪些进程在吃资源,确认是否被其他非容器进程拖累
- 用 iostat -x 1 观察磁盘 await、%util、r/s、w/s,判断是否存在存储 I/O 瓶颈(尤其对数据库类容器)
- 用 free -h 和 cat /sys/fs/cgroup/memory/memory.usage_in_bytes 对比,验证容器内存限制是否生效,避免因宿主机 swap 导致响应变慢











