我正在尝试用jprofiler 12.0.3设置一个alpine-linux-docker容器,这样我就可以远程连接到它。
在我的Dockerfile
:中
FROM adoptopenjdk/openjdk11-openj9:alpine-slim
...
RUN wget https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_12_0_3.tar.gz -P /jprofiler/ && tar -xzf jprofiler_linux_12_0_3.tar.gz -C /jprofiler && rm /jprofiler/jprofiler_linux_12_0_3.tar.gz
ENTRYPOINT ["./startup.sh"]
在我的startup.sh
文件中:
...
JAVA_OPTS="$JAVA_OPTS -agentpath:/jprofiler/jprofiler12.0.3/bin/linux_musl-x64/libjprofilerti.so=port=8849,nowait"
...
然而,当我使用上面的Dockerfile构建并运行docker映像时,我得到:
Starting app with JAVA_OPTS: -agentpath:/jprofiler/jprofiler12.0.3/bin/linux_musl-x64/libjprofilerti.so=port=8849,nowait
JProfiler> Protocol version 64
JProfiler> Thread status info workaround enabled.
JProfiler> OpenJ9 JVMTI version 1.1 detected.
JProfiler> Java 11 detected.
JProfiler> Don't wait for frontend to connect.
JProfiler> 64-bit library (musl)
JProfiler> Could not locate the config file.
JProfiler> Please specify config=[config filename].
JProfiler> If you are running JProfiler's frontend on a different
JProfiler> machine you have to copy the file jprofiler_config.xml to this
JProfiler> computer. The file is located in $HOME/.jprofiler12 or
JProfiler> in C:Users[username].jprofiler12.
如果我将基础图像更改为热点图像,例如:
FROM adoptopenjdk:11-jre-hotspot-focal
...
RUN wget https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_12_0_3.tar.gz -P /jprofiler/ && tar -xzf jprofiler_linux_12_0_3.tar.gz -C /jprofiler && rm /jprofiler/jprofiler_linux_12_0_3.tar.gz
ENTRYPOINT ["./startup.sh"]
和startup.sh
到:
...
JAVA_OPTS="$JAVA_OPTS -agentpath:/jprofiler/jprofiler12.0.3/bin/linux_musl-x64/libjprofilerti.so=port=8849,nowait"
...
我得到了以下输出,我可以用JProfiler远程连接到这个JVM:
Starting app with JAVA_OPTS: -agentpath:/jprofiler/jprofiler12.0.3/bin/linux-x64/libjprofilerti.so=port=8849,nowait
JProfiler> Protocol version 64
JProfiler> Java 11 detected.
JProfiler> Don't wait for frontend to connect.
JProfiler> 64-bit library
JProfiler> Starting up without initial configuration.
JProfiler> Listening on port: 8849.
JProfiler> Enabling native methods instrumentation.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Native library initialized
JProfiler> VM initialized
JProfiler> Retransforming 162 base class files.
JProfiler> Base classes instrumented.
你会碰巧知道alpine映像为什么会这样做吗?是否有任何方法可以解决这个配置文件问题?
区别在于OpenJ9和Hotspot VM之间。对于OpenJ9,JProfiler在启动时需要配置文件设置,因此您必须指定";config";-agentpath参数的选项。
您可以使用远程集成向导(会话-集成向导-新建远程集成(集成来获取设置帮助。