如何将分析器附加到docker进程

我正在面临Docker容器中存在的作业服务器中的内存泄漏问题。 要分析是什么导致了这个问题,我需要将jprofiler或yourkit附加到docker容器进程。 我不知道该怎么做。 有人可以把它放在一些光?

您可以尝试关注“ configurationJProfiler 9.2来分析在Docker容器中运行的应用程序 ”,来自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从主机连接,而不是将“ ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=nowait" Dockerfile中的ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler9/bin/linux-x64/libjprofilerti.so=nowait" ”。 JAVA_OPTS下行添加到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" 

现在你在docker集装箱一侧完成了。 容器已准备好连接到JProfiler GUI。 以下步骤在主机上完成。

  1. https://www.ej-technologies.com/download/jprofiler/files下载JProfiler 9.2并安装。
  2. 打开JProfiler并按Ctrl + N打开一个新的会话或在会话菜单中点击“新build会话”。
  3. 在“会话types”部分中select“附加到configuration文件JVM(本地或远程)”。 在“configuration文件JVM设置”部分inputIP地址和8849作为configuration文件端口。 将其他设置保留为默认值。 然后单击确定。

您可以将您的jProfiler附加到泊坞窗容器中的应用程序,如下所示:

 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 

当容器被构build时,这将下载并提取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循环是保持容器运行的必要条件。

Interesting Posts