我在Docker容器中的job-server中遇到了内存泄漏问题。为了分析是什么导致了这个问题,我需要将jprofiler或yourkit连接到Docker容器进程。我不确定如何操作,请问有人能提供一些指导吗?
RUN wget http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_linux_9_2.tar.gz -P /tmp/ &&\
tar -xzf /tmp/jprofiler_linux_9_2.tar.gz -C /usr/local &&\
rm /tmp/jprofiler_linux_9_2.tar.gz
ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=nowait"
EXPOSE 8849
这将使您能够在正在运行的容器中执行bash:
docker exec -it [container-name] bash
cd /usr/local/jrofiler9/
bin/jpenable
或者,如果你想在 Web 服务器启动时启用 JProfiler 代理,并等待来自主机的 JProfiler GUI 连接,而不是将 "
ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=nowait"
" 放入 Dockerfile 中。请将以下行添加到JAVA_OPTS
中。对于 tomcat,它将是CATALINA_OPTS
。
注意:config.xml
将是放置 JProfiler 许可证密钥的位置。
JAVA_OPTS="$JAVA_OPTS -agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=port=8849,wait,config=/usr/local/jprofiler9/config.xml"
EXPOSE 8849
RUN wget http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_linux_9_2_1.tar.gz --no-verbose -P /tmp/ && \
tar -xzf /tmp/jprofiler_linux_9_2_1.tar.gz -C /usr/local && \
rm /tmp/jprofiler_linux_9_2_1.tar.gz
ENTRYPOINT exec java -jar /app.jar & \
echo $! >>/tmp/process.pid && \
sleep 60s && \
/usr/local/jprofiler9/bin/jpenable --pid=$(cat /tmp/process.pid) --gui --port=8849 && \
while true; do sleep 2147483647; done