服务器监控如何监控 Docker 容器的资源消耗

作者:袖梨 2026-08-15

docker stats 是最轻量、最常用的实时资源监控方式,支持快照模式和指定容器查看,输出 CPU%、内存占用及 I/O 等关键指标;需结合 docker top、docker exec top 和宿主机工具定位进程级问题;长期监控推荐 cAdvisor + Prometheus + Grafana 组合,并注意资源限制对指标解读的影响。

直接用 docker stats 就能快速看到容器的实时资源消耗,这是最轻量、最常用的方式。它不需要装额外软件,开箱即用,适合日常巡检和紧急排查。

用 docker stats 快速查看实时占用

这条命令是 Docker 原生支持的,输出清晰直观:

  1. docker stats --no-stream:只输出当前快照,适合脚本调用或定时采集
  2. docker stats web-app:只查指定容器,避免信息干扰
  3. 输出字段包括:CPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/O

比如看到某容器 MEM % 持续接近 100%CPU % 长期高于 90%,基本可以锁定问题方向。

定位具体进程:结合 docker top 和宿主机工具

docker stats 告诉你“谁吃得多”,但不说明“为什么吃”。这时需要深入容器内部:

  1. docker top <container>:列出容器内所有进程及其 CPU、内存占用
  2. docker exec -it <container> top:进容器运行 top,看哪个进程在狂占资源
  3. 在宿主机上用 iotop -o --batch 查磁盘 I/O 热点,或 pidstat -u 1 看 CPU 时间分布

长期监控与告警:cAdvisor + Prometheus

如果要记录趋势、做容量分析或触发告警,单靠 docker stats 不够。推荐标准组合:

  1. cAdvisor:自动采集所有容器的 CPU、内存、网络、磁盘指标,自带 Web 页面(默认端口 8080)
  2. Prometheus:拉取 cAdvisor 数据并长期存储,支持 PromQL 查询和阈值告警
  3. 搭配 Grafana 可视化,一眼看出某容器内存是否缓慢上涨、某服务网络延迟是否突增

部署 cAdvisor 很简单,一个 docker-compose.yml 就能跑起来,无需修改应用代码。

注意资源限制与实际使用的关系

监控时别只看百分比,更要对照容器的资源限制:

  1. 启动时加了 --memory 512m,那 MEM USAGE / LIMIT 显示 500MiB / 512MiB 就已非常危险
  2. 没设限制?那 MEM USAGE 显示的是宿主机总内存,数值本身参考意义不大,重点看增长趋势
  3. docker inspect <container> | grep -i memory 可确认实际生效的限制值

相关文章

精彩推荐