2016-10-25 24 views
5

पर डीटीआरएस के साथ जावा अनुप्रयोगों को प्रोफाइल करना मैं मैकोज़ सिएरा 10.12 पर डीटीआर का उपयोग कर जावा एप्लिकेशन को प्रोफाइल करने का प्रयास कर रहा हूं। मैं जेडीके 8 का उपयोग कर रहा हूं:मैकोज़

⋊> ~ java -version 
java version "1.8.0_102" 
Java(TM) SE Runtime Environment (build 1.8.0_102-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) 

⋊> ~ echo $JAVA_HOME 
/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home 

मेरा अंतिम लक्ष्य सभी जावा विधि प्रविष्टियों का पता लगाने और विशिष्ट पैकेजों के लिए बाहर निकलना है।

DTrace Probes in HotSpot VM और Mac OS X Port Using HotSpot DTrace Probes सुझाव देते हैं कि यह वास्तव में मैकोज़ पर समर्थित होना चाहिए। हालांकि, यहां तक ​​कि जब मेरी जावा अनुप्रयोग चल रहा है, वहाँ कोई hotspot जांच उपलब्ध हैं और jstack() विफल प्रकट होता है:

⋊> ~ pgrep java 
24564 

⋊> ~ sudo dtrace -ln 'hotspot*:::' 
dtrace: system integrity protection is on, some features will not be available 

    ID PROVIDER   MODULE       FUNCTION NAME 
dtrace: failed to match hotspot*:::: No probe matches description 

⋊> ~ sudo dtrace -n 'syscall::read:entry /execname == "java"/ { jstack(); }' 
dtrace: system integrity protection is on, some features will not be available 

dtrace: description 'syscall::read:entry ' matched 1 probe 
dtrace: error on enabled probe ID 1 (ID 153: syscall::read:entry): invalid address (0xe2e3275e) in action #1 
dtrace: error on enabled probe ID 1 (ID 153: syscall::read:entry): invalid address (0xe2e3275e) in action #1 
dtrace: error on enabled probe ID 1 (ID 153: syscall::read:entry): invalid address (0xe2e3275e) in action #1 
… 

dtrace आदेश को libjvm.dylib के लिए पथ प्रदान करने में मदद नहीं लगता है:

⋊> ~ ll "$JAVA_HOME/jre/lib/server/" 
total 31616 
-rw-rw-r-- 1 root wheel 1.4K Jun 22 15:02 Xusage.txt 
-rwxrwxr-x 1 root wheel 15K Jun 22 15:01 libjsig.dylib 
-rwxrwxr-x 1 root wheel 15M Jun 22 15:02 libjvm.dylib 

⋊> ~ sudo dtrace -L "$JAVA_HOME/jre/lib/server/" -ln 'hotspot*:::' 
dtrace: system integrity protection is on, some features will not be available 

    ID PROVIDER   MODULE       FUNCTION NAME 
dtrace: failed to match hotspot*:::: No probe matches description 

तो मुझे क्या याद आ रही है? मैं डीटीआरएस सुविधाओं का उपयोग कर जावा एप्लिकेशन कैसे प्रोफाइल करूं?

उत्तर

5

ठीक है, मैं सिस्टम इंटीग्रटी प्रोटेक्शन को संभावित कारण के रूप में छूटने के लिए बहुत जल्दी था।

(बूट के दौरान प्रेस ⌘R) hotspot जांच वसूली ओएस में csrutil enable --without dtrace को क्रियान्वित करने के बाद अब सिर्फ दिखाने:

⋊> ~ sudo dtrace -ln 'hotspot*:::' | wc -l 
    1039