我在docker容器中存在的job-server中遇到内存泄漏问题。要分析导致问题的原因,我需要将jprofiler或yourkit附加到docker容器进程。我不知道该怎么做。有人可以对它有所了解吗?
答案 0 :(得分:1)
您可以尝试点击 Configure JProfiler 9.2 to profiling applications running in Docker containers 中的“Andrew Liu”:
这将涉及使用以下内容完成现有的Dockerfile:
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,而不是在Dockerfile中放置“
ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=nowait"
”。将以下行添加到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"
现在你已经完成了码头工人的容器方面。容器已准备好附加到JProfiler GUI。以下步骤将在主机上完成。
- 从https://www.ej-technologies.com/download/jprofiler/files下载JProfiler 9.2并安装它。
- 打开JProfiler并按 Ctrl + N 或在会话菜单中点击“新会话”打开新会话。
- 在“会话类型”部分中选择“附加到已分析的JVM(本地或远程)”。在Profiled JVM Settings部分中输入IP地址和8849作为性能分析端口。将其他设置保留为默认值。然后单击“确定”。
醇>
答案 1 :(得分:0)
EXPOSE 8849
公开剖析端口很重要(默认为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
在构建容器时,这会在docker容器中下载并解压缩jProfiler。
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
这就是我处理你无法在一个docker容器中运行两个应用程序的事实。首先,我们执行jar并将processId保存到文件中。然后我们等待60秒,之后我们启动jProfiler(jpenable)并将其附加到我们的进程(通过processId)。 while循环是保持容器运行的必要条件。