PrintAssembly के साथ जावा-8-ओरेकल (1.8.0_66) "hsdis-amd64.so लोड नहीं कर सका"


20

मैं अपने कार्यक्रमों को -XX:+PrintAssemblyविकल्पों के साथ चलाने की कोशिश कर रहा हूं लेकिन मुझे हमेशा संदेश मिलता है जैसे:

Java हॉटस्पॉट (TM) 64-बिट सर्वर VM चेतावनी: PrintAssembly सक्षम है; अतिरिक्त उत्पादन प्राप्त करने के लिए DebugNonSafepoints को चालू करने से hsdis-amd64.so लोड नहीं हो सका; पुस्तकालय लोड करने योग्य नहीं; PrintAssembly अक्षम है

मैंने केनाई से hsdis-amd64.so डाउनलोड किया: https://kenai.com/projects/base-hsdis/downloads

मैंने स्वयं इस लाइब्रेरी का निर्माण http://sourceforge.net/projects/fcml/files/fcml-1.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 खोजों में से हैं (मेरे मामले में, यह शायद अधिक स्थानों की खोज की होगी, लेकिन ऊपर के अंतिम स्थान के बाद से बंद हो गया है जहाँ यह साझा वस्तु मिली है)।

ध्यान दें कि मूल कमांड के चाइल्ड प्रोसेस के रूप में वास्तविक JVM लॉन्च -fहोने के straceबाद से आपको निश्चित रूप से ध्वज की आवश्यकता है java

मुद्दों के बीच 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पैकेज-मैनेजर फ्रेंडली तरीके से एक (संभवतः काम करने वाली) फ़ाइल पाने का एक तरीका है। आप हमेशा इसे सीधे विभिन्न स्रोतों में से एक से भी सीधे डाउनलोड कर सकते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.