如何将探查器附加到docker进程

时间:2016-12-28 07:32:57

标签: docker profiler

我在docker容器中存在的job-server中遇到内存泄漏问题。要分析导致问题的原因,我需要将jprofiler或yourkit附加到docker容器进程。我不知道该怎么做。有人可以对它有所了解吗?

2 个答案:

答案 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。以下步骤将在主机上完成。

     
      
  1. https://www.ej-technologies.com/download/jprofiler/files下载JProfiler 9.2并安装它。
  2.   
  3. 打开JProfiler并按 Ctrl + N 或在会话菜单中点击“新会话”打开新会话。
  4.   
  5. 在“会话类型”部分中选择“附加到已分析的JVM(本地或远程)”。在Profiled JVM Settings部分中输入IP地址和8849作为性能分析端口。将其他设置保留为默认值。然后单击“确定”。
  6.   

答案 1 :(得分:0)

您可以将jProfiler附加到docker容器内的应用程序,如下所示:

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循环是保持容器运行的必要条件。