PrintAssembly의 java-8-oracle (1.8.0_66) 문제“hsdis-amd64.so를로드 할 수 없습니다”


20

-XX:+PrintAssembly옵션으로 프로그램을 실행하려고하는데 항상 다음과 같은 메시지가 나타납니다.

Java HotSpot ™ 64 비트 서버 VM 경고 : PrintAssembly가 사용 가능합니다. 추가 출력을 얻기 위해 DebugNonSafepoints 켜기 hsdis-amd64.so를로드 할 수 없습니다. 라이브러리를로드 할 수 없습니다. PrintAssembly가 비활성화되었습니다

Kenai에서 hsdis-amd64.so를 다운로드했습니다. https://kenai.com/projects/base-hsdis/downloads

http://sourceforge.net/projects/fcml/files/fcml-1.1.1/ project 로이 라이브러리를 직접 빌드했습니다 .

나는 "구글 말한다"어디에나 넣어 :

/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/
/usr/lib/jvm/java-8-oracle/lib/amd64/

이름으로 :

hsdis-amd64.so
libhsdis-amd64.so
hsdis.so
libhsdis.so

수동으로 내보내기 설정을 시도했습니다. LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... 그리고 아무것도 아닙니다.

더 이상 Google 결과가 더 이상 위 솔루션의 조합이 아닙니다 :-(

누구든지 나를 도울 수 있습니까?

답변:


10

다른 답변 1에libhsdis0-fcml 설명 된대로 먼저 설치하십시오 .

sudo apt-get install libhsdis0-fcml

OpenJDK 용으로 만 설치됩니다. 그러나을 사용 java-8-oracle하고 있으므로 복사해야합니다. 나를 위해 일한 정확한 복사 명령은 다음과 같습니다 .

sudo cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/hsdis-amd64.so /usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so

그래도 작동하지 않으면 찾고 strace있는 곳을 확인하십시오 java. 나는 사용했다 :

strace -f java -XX:CompileCommand='print, *.*' ... |& grep hsdis

다음과 같이 출력을 얻으려면 :

[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY|O_CLOEXEC) = 14

당신이 시도하고있는 장소와 이름이 JDK 검색 중 확실하다는 것을 알 수 있습니다 (제 경우에는 더 많은 장소를 검색했을 것이지만 위의 마지막 위치가 공유 객체를 찾은 위치 이후 중지되었습니다).

실제 JVM이 원래 명령 의 하위 프로세스로 시작되므로 반드시 -f플래그가 필요합니다 .stracejava

문제 중에는 strace권한 문제가있을 수 있습니다. 사용자가 시작하기 위해 라이브러리에서 읽기 권한이 필요했습니다 java.

java -version출력 :

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

1 실제로 이것은 hsdis.so패키지 관리자에게 친숙한 방식으로 (아마도 작동하는) 파일 을 얻는 방법입니다. 다양한 소스 중 하나에서 직접 직접 다운로드 할 수도 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.