RAM正在我的docker容器中增加,我旨在调查原因。建议我使用内存分析器来帮助我。
被告知步骤如下:
mprof run -o memory-profile.dat python3 -m vdx
手动执行容器中的程序mprof plot memory-profile.dat
现在,由于我是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
。
我在做什么错?
注意,容器的生命周期有两个不同的阶段:构建和运行。 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"]
。