UnsatisfiedLinkError при запуске jpenable в alpine / Jprofile 10 - PullRequest
0 голосов
/ 22 мая 2018

При запуске jpenable для разрешения профилирования для Jprofiler10 в контейнере alpine: 3.3 с JDK 8 я получаю исключение 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)

1 Ответ

0 голосов
/ 24 мая 2018

Итак, я отвечу на свой собственный вопрос.

Во-первых, я заметил, что ldd показал, что MOST нативных библиотек Java был поврежден (не разрешая зависимые библиотеки) в пакете alpine: 3.5 openjdk8-jre.Я нашел решение для настройки пути загрузки библиотеки здесь: 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/

Однако /opt/jprofiler10.1.1/bin/linux-x64/libattach.so, предоставленный в файле tar Jprofiler10, все еще не работает, поэтому я удалил его и использовал libattach.so, содержащийся в/usr/lib/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 

После этого я смог вызвать контейнер на ранчере.

Последними этапами были запуск оболочки в контейнере и запуск jpenable, чтобы инструмент Jprofiler мог создать соединение с jvm.

Например, /opt/jprofiler10.1.1/bin/jpenable

Затем я смог подключиться к порту 8849 и профилировать приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...