【问题标题】:UnsatisfiedLinkError when running jpenable in alpine / Jprofile 10在 alpine / Jprofile 10 中运行 jpenable 时出现 UnsatisfiedLinkError
【发布时间】:2018-05-21 21:37:49
【问题描述】:

当运行 jpenable 以允许在运行 JDK 8 的 alpine:3.3 容器中对 Jprofiler10 进行分析时,我遇到了 UnsatisfiedLinkError 异常。有什么想法吗?

ERROR: The agent could not be loaded: Picked up _JAVA_OPTIONS: -Xmx1024m
Exception in thread "main" java.lang.UnsatisfiedLinkError: /opt/jprofiler10/bin/
linux-x64/libattach.so: Error relocating /opt/jprofiler10/bin/linux-x64/libattac
h.so: __strcpy_chk: symbol not found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at com.jprofiler.attach.b.b.b.load(ejt:6)
at com.jprofiler.attach.b.b.i.loadLibraryPath(ejt:49)
at com.jprofiler.attach.a.b(ejt:92)
at com.jprofiler.attach.a.a(ejt:74)
at com.jprofiler.attach.a.main(ejt:116)

【问题讨论】:

  • 你可以尝试安装包gcc g++ linux-headers udev吗?
  • 谢谢,@IngoKegel - 我尝试将这些包添加到容器中 - 但结果是一样的。我有一张支持票,Hannes 正在和我一起工作。

标签: java alpine jprofiler


【解决方案1】:

所以,我会回答我自己的问题。

首先 - 我注意到 ldd 显示 alpine:3.5 openjdk8-jre 包中的大多数 java 本机库已损坏(不解析依赖库)。我在这里找到了配置加载库路径的解决方案:https://github.com/docker-library/openjdk/issues/77

使用以下内容创建 /etc/ld-musl-x86_64.path 修复了我在 ldd 中发现的大部分库问题。

/lib
/usr/lib
/usr/local/lib
/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64
/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/jli
/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server
/opt/jprofiler10.1.1/bin/linux-x64/

但是 Jprofiler10 tar 文件中提供的 /opt/jprofiler10.1.1/bin/linux-x64/libattach.so 仍然损坏,所以我将其删除 - 并使用 /usr/lib/ 中包含的 libattach.so jvm/java-1.8-openjdk/jre/lib/amd64目录。

以下 Dockerfile 显示了我是如何构建容器并解决问题的。

FROM alpine:3.5
RUN apk --no-cache add \
    openjdk8-jre-base \
    libstdc++
COPY ld-musl-x86_64.path /etc/ld-musl-x86_64.path
ADD jprofiler_linux_10_1_1.tar /opt/
RUN rm /opt/jprofiler10.1.1/bin/linux-x64/libattach.so 

在此之后 - 我能够将容器放在牧场主中。

最后的步骤是在容器中执行 shell 并运行 jpenable 以启用 Jprofiler 工具来创建与 jvm 的连接。

例如/opt/jprofiler10.1.1/bin/jpenable

然后我能够连接到端口 8849 并分析应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多