在docker容器中使用memory-profiler

问题描述 投票:0回答:1

RAM正在我的docker容器中增加,我旨在调查原因。建议我使用内存分析器来帮助我。

被告知步骤如下:

现在,由于我是docker,python和memory profiler的新手,因此我难以实现这些步骤。

第一步,我在RUN pip3 install memory-profiler下面的Dockerfile中包含了RUN pip3 install -r requirements.txt

然后在下面说COPY src /vdx的地方添加了RUN mprof run -o memory-profile.dat python3 -m vdp现在,当我构建并运行容器时,一切似乎都照常运行...

正在构建容器:

Step 7/12 : RUN pip3 install -r requirements.txt
 ---> Using cache
 ---> 11ad28b8793a
Step 8/12 : RUN pip3 install memory-profiler
 ---> Using cache
 ---> 58885abbcd8b
Step 9/12 : COPY src /vdx
 ---> Using cache
 ---> 15e884cb94c5
Step 10/12 : WORKDIR /
 ---> Using cache
 ---> 93cdfcee7f4a
Step 11/12 : RUN mprof run -o memory-profile.dat python3 -m vdx
 ---> Using cache
 ---> de7b15fd74ef
Step 12/12 : ENTRYPOINT ["python3", "-m", "vdx"]
 ---> Using cache
 ---> 53675841da99
Successfully built 53675841da99

该过程运行顺利...

但未创建文件memory-profile.dat

我在做什么错?

docker memory-management
1个回答
0
投票

注意,容器的生命周期有两个不同的阶段:构建和运行。 Dockerfile适用于构建阶段,而Dockerfile中的ENTRYPOINT操作适用于运行阶段。

这意味着Dockerfile中的RUN mprof run -o memory-profile.dat python3 -m vdx可能不是您想要的,因为您想在容器运行时而不是在构建时调查问题,不是吗?

基本上,您正在做的是,在构建时使用内存事件探查器来运行您的应用程序,然后在没有内存事件探查器的情况下为运行时设置了一个入口点,因此,当您运行容器时,实际上并没有输出分析器的原因,因为它没有运行。

您需要在运行时运行探查器,将指令移至ENTRYPOINT。 ENTRYPOINT ["mprof", "run", "-o", "memory-profile.dat", "python3", "-m", "vdx"]

© www.soinside.com 2019 - 2024. All rights reserved.