gpt4 book ai didi

docker - 如何记录 Docker 容器的峰值内存使用情况?

转载 作者:行者123 更新时间:2023-12-02 18:00:13 28 4
gpt4 key购买 nike

我正在运行许多短期的 docker 容器,每个容器都执行一些内存密集型批处理。我正在寻找一种方法来查找每个容器在运行时达到的峰值内存使用量。知道这一点将使我能够优化运行这些容器的基础架构,以备将来运行。

实现此目的的一种天真的方法是将 docker stats 的流输出重定向到某个文件: docker stats container_id > stats.log 。但是,这需要为每个容器运行一个进程,然后对非常冗长的日志进行排序以找到使用高峰。我想知道是否有更简单的方法。

最佳答案

如果你对容器内有 PID=1 的进程感兴趣,你可以在主机上找到这个进程的 PID 然后使用:

grep VmPeak /proc/$PID/status

使用 mongo 容器的示例:

这个容器有一个进程:
$ docker container exec -it mongo top -bn 1
top - 10:04:51 up 32 min, 0 users, load average: 0.36, 0.52, 0.55
Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.1 us, 2.0 sy, 0.3 ni, 90.6 id, 0.7 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 6103572 total, 2642744 free, 1352032 used, 2108796 buff/cache
KiB Swap: 1942896 total, 1942896 free, 0 used. 4277928 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
64 root 20 0 38624 3116 2724 R 6.7 0.1 0:00.89 top
1 mongodb 20 0 1094540 80100 35916 S 0.0 1.3 0:22.51 mongod

要从主机的角度获取此进程的 PID:
$ docker inspect -f '{{.State.Pid}}' mongo
2532

最后:
$ grep VmPeak /proc/2532/status
VmPeak: 1094540 kB

链接:
  • Peak memory usage of a linux/unix process
  • Peak memory usage of a process
  • Finding Docker container processes? (from host point of view)
  • 关于docker - 如何记录 Docker 容器的峰值内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283529/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com