Java 在armhf上启用JProfiler时出现不满意的链接错误

Java 在armhf上启用JProfiler时出现不满意的链接错误,java,docker,raspberry-pi3,jprofiler,Java,Docker,Raspberry Pi3,Jprofiler,我正在尝试在一个docker容器中启动一个JProfiler代理,该容器运行在Raspberry PI 3上。这是完整的Dockerfile FROM balenalib/raspberrypi3-openjdk RUN ["cross-build-start"] RUN curl -SL http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_linux_11_0.tar.gz | tar -xz -C /usr/loca

我正在尝试在一个docker容器中启动一个JProfiler代理,该容器运行在Raspberry PI 3上。这是完整的Dockerfile

FROM balenalib/raspberrypi3-openjdk

RUN ["cross-build-start"]
RUN curl -SL http://download-keycdn.ej-technologies.com/jprofiler/jprofiler_linux_11_0.tar.gz | tar -xz -C /usr/local && \
  echo 'sudo -u root /usr/local/jprofiler11.0/bin/jpenable -g -p 8849' > /jprofile.sh && \
  chmod +x /jprofile.sh
RUN [ "cross-build-end" ]

ENV JPAGENT_PATH="-agentpath:/usr/local/jprofiler11.0/bin/linux-armhf/libjprofilerti.so=nowait"
ENV JAVA_OPTS=""
EXPOSE 8849

ADD build/libs/myproject-0.0.1-SNAPSHOT.jar /app.jar

ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar
要进行分析,请运行:

docker exec -it mycontainer /bin/bash -c "/jprofile.sh"
以下是完整的输出:

Connecting to app.jar [1] ... ERROR: The agent could not be loaded: Exception in thread "main" java.lang.UnsatisfiedLinkError: sun.tools.attach.LinuxVirtualMachine.isLinuxThreads()Z
        at sun.tools.attach.LinuxVirtualMachine.isLinuxThreads(Native Method)
        at sun.tools.attach.LinuxVirtualMachine.<clinit>(LinuxVirtualMachine.java:343)
        at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63)
        at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:195)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at com.jprofiler.attach.proxy.a.e$b.invoke(ejt:110)
        at com.sun.proxy.$Proxy0.attach(Unknown Source)
        at com.jprofiler.attach.a.main(ejt:119)
连接到app.jar[1]。。。错误:无法加载代理:线程“main”java.lang.UnsatifiedLink中出现异常错误:sun.tools.attach.LinuxVirtualMachine.IsLinux线程()Z
位于sun.tools.attach.LinuxVirtualMachine.isLinuxThreads(本机方法)
位于sun.tools.attach.LinuxVirtualMachine。(LinuxVirtualMachine.java:343)
位于sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63)
位于com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:195)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
在com.jprofiler.attach.proxy.a.e$b.invoke上(ejt:110)
位于com.sun.proxy.$Proxy0.attach(未知源)
在com.jprofiler.attach.a.main(ejt:119)

当我从
jshell
调用
System.loadLibrary(“attach”)
时,本机库似乎可以正常加载。你知道是什么导致了这个异常吗?

通过
support@ej-technologies.com
-如果将正确的文件放入
lib/libattach.so
,则可以将以下代码段添加到Dockerfile以使其正常工作

armhf的官方支持计划在
11.0.1
中发布

# ...
# Add ARMHF remote attach library (acquired via EJ Technologies support)
# See https://stackoverflow.com/questions/56307915/unsatisfiedlinkerror-when-enabling-jprofiler-on-armhf
ADD lib/libattach.so /usr/local/jprofiler11.0/bin/linux-armhf/
RUN chmod a+x /usr/local/jprofiler11.0/bin/linux-armhf/libattach.so

RUN [ "cross-build-end" ]

特别感谢英戈·凯格尔

linux armhf目前确实不支持附加模式。请联系support@ej-technologies.com,我将向您发送一个构建,在其中添加缺少的本机库。