2009-04-07 12 views
10

का उपयोग कर रहा JVisualVM चलाने जावा में एक दूरस्थ आवेदन से हीप डंप जाओ (Windows XP सन जावा 1.6.0.13, 32 बिट ग्राहक वी एम) एक दूर के आवेदन की निगरानी के लिए (लिनक्स सन जावा 1.6.0.07, 64 बिट सर्वर वीएम)। वास्तविक दूरस्थ अनुप्रयोग शुरू करने से पहले, मैं एक सब पहुँच नीति का उपयोग रिमोट मशीन jstatd पर लॉन्च:JVisualVM

grant codebase "file:${java.home}/../lib/tools.jar" { 
    permission java.security.AllPermission; 
}; 

तब मैं कमांड लाइन

java -Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.port=3333 
compileTest.Main 

का उपयोग कर क्लाइंट मशीन से वास्तविक अनुप्रयोग शुरू, मैं दूरस्थ ऐप देख सकते हैं और इसकी निगरानी कर सकते हैं। मैं थ्रेड डंप भी कर सकता हूं। दुर्भाग्यवश, हीप-डंप बटन ग्रे हो गया है।

मैं कैसे JVisualVM का उपयोग कर एक दूर से नजर रखी आवेदन से एक ढेर-डंप प्राप्त कर सकते हैं?

मैं JConsole उपयोग करने की कोशिश। JConsole के साथ com.sun.management.HotSpotDiagnostic dumpHeap ऑपरेशन का उपयोग करके दूर हीप डंप बनाना संभव है। मैं चाहता हूं कि डंप को क्लाइंट साइड में स्थानांतरित किया जाए और JVisualVM द्वारा प्रदान किए गए टूल का उपयोग करके विश्लेषण किया जाए। मैं यह कैसे कर सकता हूँ?

+0

जावा प्रक्रिया – rogerdpack

+0

@rogerdpack अच्छा बिंदु मदद मिल सकती है चल रहा है कि एक ही उपयोगकर्ता के रूप में jvisualvm चल रहा है! मैंने इस प्रश्न/विषय पर अपना रास्ता घुमाया, क्योंकि मेरे पास http://stackoverflow.com/questions/8799929/visualvm-unable-to-sampler-memory जैसा ही प्रश्न है, और मुझे लगता है कि आपका कथन/धारणा सही है। जब मैं अपने डेवलपर पीसी/सर्वर पर अपने नेटबीन्स आईडीई के माध्यम से टोमकैट/टोमी चलाता हूं, तो नमूना> मेमोरी बटन सक्षम होता है, लेकिन नमूना> मेमोरी बटन उत्पादन सर्वर पर अक्षम होता है, क्योंकि टॉमकैट/टोमे विंडोज सेवा के रूप में चल रहा है, और मैं सिस्टम या लोकल सेवा के रूप में उत्पादन सेवा में लॉग इन नहीं किया गया है। :( – Howard

उत्तर

0

आप दूर से ढेर का विश्लेषण नहीं कर सकते। आप अपने सर्वर पर visualvm चला सकते हैं और एक्स सत्र को अपनी स्थानीय मशीन पर निर्यात कर सकते हैं। आपको अपने सर्वर पर x11 इंस्टॉल करना होगा जो कई सर्वर नहीं करते हैं।

3

दुर्भाग्य से यह करने के लिए एक स्वचालित तरीका नहीं है। आपको अपने जेवीएम के ढेर को डंप करने के लिए लिनक्स सर्वर पर मैन्युअल रूप से जेएमएपी चलाने की आवश्यकता होगी और फिर परिणामस्वरूप हेप डंप को अपनी स्थानीय मशीन पर JVisualVM चलाकर कॉपी करें और विश्लेषण के लिए JVisualVM में हीप डंप लोड करने के लिए फ़ाइल | लोड ... का उपयोग करें।

6

यह करने के लिए एक तरीका नहीं है!

  1. rmiregistry -J-Xbootclasspath/p: $ JAVA_HOME/lib/SA-jdi.jar (इस का उपयोग करता है पोर्ट 1099) मशीन है, जिसमें आवेदन चल रहा है पर
  2. स्टार्ट 'jsadebugd': jsadebugd & (पीआईडी JVM का)
  3. रिमोट मशीन उपयोग पर निम्नलिखित jmap -dump: फ़ाइल =: 1099

  4. jhat

ऊपर 7000

उपरोक्त सभी उपकरण JDK 1.6

का हिस्सा

शुभकामनाएँ हैं बंदरगाह पर एक वेब अनुप्रयोग शुरू कर देंगे!

+0

क्या यह परिणामस्वरूप चल रहे ऐप के प्रदर्शन प्रदर्शन में होगा? शायद इससे कोई फर्क नहीं पड़ता। –

2

1.3 के बाद से, VisualVM समर्थन दूरदराज के ढेर उदासीनता:

VisualVM 1.3 के साथ शुरू, अब आप ढेर उपकरण में कार्यों और बटन डंप का उपयोग करें कि दूर से चल रहे हैं आवेदनों की एक हीप डंप लेने के लिए कर सकते हैं। जब बोला जाता है, तो एक संवाद प्रदर्शित होता है जो आपको रिमोट सिस्टम पर पूरा पथ निर्दिष्ट करने में सक्षम बनाता है जहां आप ढेर को डंप करना चाहते हैं। ढेर डंप बनने के बाद, आपको फ़ाइल को मैन्युअल रूप से अपनी स्थानीय मशीन पर कॉपी करने की आवश्यकता है और VisualVM का उपयोग करके फ़ाइल को खोलने और विश्लेषण करने के लिए लोड एक्शन का उपयोग करना होगा।

देखें: VisualVM 1.3 Released

संबंधित मुद्दे