java-8-oracle (1.8.0_66) มีปัญหากับ PrintAssembly“ ไม่สามารถโหลด hsdis-amd64.so”


20

ฉันพยายามเรียกใช้โปรแกรมด้วย-XX:+PrintAssemblyตัวเลือก แต่ฉันได้รับข้อความเช่น:

การเตือน VM Server 64 บิตของ Java HotSpot (TM): เปิดใช้งาน PrintAssembly เปิดใช้งาน DebugNonSafepoints เพื่อรับเอาต์พุตเพิ่มเติมไม่สามารถโหลด hsdis-amd64.so; ห้องสมุดไม่สามารถโหลดได้ PrintAssembly ถูกปิดใช้งาน

ฉันดาวน์โหลด hsdis-amd64.so จาก Kenai: https://kenai.com/projects/base-hsdis/downloads

ฉันสร้างห้องสมุดนี้ด้วยตัวเองด้วยhttp://sourceforge.net/projects/fcml/files/fcml-1.1.1/โครงการ

ฉันใส่มันทุกที่ "google พูดว่า":

/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

ก่อนติดตั้งlibhsdis0-fcmlตามที่อธิบายไว้ในคำตอบอื่น ๆ1 :

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 (ในกรณีของฉันมันอาจจะมีการค้นหาสถานที่มากกว่า แต่หยุดลงเนื่องจากตำแหน่งสุดท้ายด้านบนเป็นที่ที่มันพบวัตถุที่ใช้ร่วมกัน)

โปรดทราบว่าคุณต้องมีการ-fตั้งค่าสถานะอย่างแน่นอนstraceเนื่องจาก JVM จริงจะถูกเรียกใช้เป็นกระบวนการลูกของjavaคำสั่งดั้งเดิม

ท่ามกลางปัญหาstraceอาจเปิดเผยเป็นปัญหาสิทธิ์ ฉันต้องการอ่าน perms บนไลบรารีสำหรับผู้ใช้ที่เปิดตัว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.