如何查询docker-compose单次运行过程中的内存使用量?
查询docker-compose运行时内存占用的可行方法
方法1:直接使用docker compose自带的统计命令(最简单,适合当前正在运行的实例)
进入你的docker-compose.yml所在的目录,执行以下命令即可一次性输出当前项目所有关联容器的内存占用汇总:
# 新版Docker(compose V2) docker compose stats --no-stream # 旧版docker-compose(V1) docker-compose stats --no-stream
--no-stream参数表示只输出一次当前统计值,不开启实时刷新。输出结果中会直接展示每个服务的内存使用量、内存占比,你可以手动累加各服务的内存值得到整套配置的总内存消耗。
如果需要自动计算总内存,可以搭配awk处理输出:docker compose stats --no-stream --format "{{.MemUsage}}" | awk '{sum += $1} END {print "项目总内存占用:" sum " MiB"}'
方法2:通过Docker标签过滤统计(适合不在docker-compose.yml目录下操作的场景)
docker-compose启动的所有容器默认会携带com.docker.compose.project标签,值为你的项目名(默认是目录名),你可以通过标签过滤所有关联容器统计内存:docker stats --filter "label=com.docker.compose.project=你的项目名称" --no-stream
方法3:回溯历史运行实例的内存占用(适用于已经停止运行的历史实例)
如果需要查询已经结束的某次运行的内存数据,需要提前在运行前配置指标采集:
- 轻量方案:写一个简单的定时脚本,每间隔几秒调用一次上述的统计命令,把结果写入本地日志文件,运行结束后即可从日志中查询对应时间段的内存峰值、平均值等数据
- 全量监控方案:在docker-compose配置中加入node_exporter、cAdvisor等采集组件,搭配Prometheus存储指标、Grafana做可视化,运行过程中的所有内存指标会持久化存储,事后可以回溯任意时间点的精确内存消耗。
注意:docker stats输出的内存使用量默认包含了文件缓存、共享内存等部分,如果需要统计服务实际申请的物理内存,可以通过
/sys/fs/cgroup/memory/docker/<容器ID>/memory.usage_in_bytes读取cgroup原始数据计算。
内容的提问来源于stack exchange,提问作者Ido Ran
相关产品推荐
相关产品推荐

