2012-08-09 14 views
9

मैं ग्रहण VisualVM launcher का उपयोग करने का प्रयास कर रहा हूं। यह बहुत अच्छा लगता है, सिवाय इसके कि ऐसा लगता है कि विजुअलVM मेरे आवेदन की कोई प्रोफाइलिंग करने में बहुत देर हो चुकी है। प्रोफाइलर शुरू होने से पहले मेरा आवेदन निष्पादन समाप्त करता है; एक बार यह शुरू होने के बाद, एक त्रुटि विंडो पॉप अप हो जाती है, कह रही है: cannot open requested application। इसके बाद यह VM चल रहा है Eclipse (लेबल "org.eclipse.equinox.launcher.Main")। मैं इसे अपने आवेदन की प्रतीक्षा करने और उचित प्रोफाइलिंग करने के लिए कैसे प्राप्त कर सकता हूं?विजुअलVM लॉन्चर त्रुटि

उत्तर

8

मुझे वह समस्या पता है। केवल गरीब आदमी का समाधान मैं हमेशा के साथ आया है:

  1. अपने स्रोत कोड में एक ब्रेकपाइंट सेट
  2. प्रोफाइलर
  3. चलो डिबग मोड
  4. में अपने कार्यक्रम के शुरू से कनेक्ट कार्यक्रम जारी

विज़ुअलVM को आपके वीएम में प्रोफाइलिंग एजेंट इंजेक्ट करने में थोड़ा समय लगता है और मुझे पूरा यकीन है कि यह केवल दूरस्थ प्रोफाइलिंग की अनुमति देता है।

एक विकल्प के रूप में आप YourKit का उपयोग कर सकते हैं, यह बहुत ही शुरुआत से आपके आवेदन को प्रोफाइल कर सकता है। इस तरह की रूपरेखा एजेंट वीएम स्टार्टअप पर इंजेक्ट किया जाता है:

java -agentpath:c:\yourkit\yjpagent.dll FooClass 

मैं उत्सुक हूँ क्यों VisualVM इस विकल्प प्रदान नहीं करता है, इसकी तकनीकी रूप से संभव के बाद से। वैसे भी मुझे लगता है कि डीबग चाल ईक्लीप्स के भीतर से एक अच्छा समाधान है, जब तक कि आप कक्षा लोडिंग आदि में रुचि रखते हैं।

+0

क्या आप बस थ्रेड.sleep() नहीं कर सकते थे, जबकि यह स्वयं काम कर रहा है? –

+0

@RyanAmos यह भी संभव है, मैंने डीबग मोड के साथ चाल पर आने से पहले यह किया है। मैं इसे 'टाइमर स्लीप' के साथ एक साथ समय नहीं लेना चाहता था, या तो आपको 'नींद' पहनने तक इंतजार करना पड़ेगा या अटैचिंग में बहुत लंबा समय लगेगा। –

+0

आपकीकिट बहुत महंगा है। सहायता के लिए धन्यवाद! –

11

यह शायद बहुत देर हो चुकी है, लेकिन मुझे एक ही समस्या थी, और ब्रेकपॉइंट सेट करना और फिर शुरू करना डीबगिंग मोड बिल्कुल मदद नहीं करता था। अंततः मुझे पता चला कि VisualVM फ़ोल्डर में% अस्थायी डेटा को% TMP%/hsperfdata_ [username] में सहेजता है, मेरी विंडोज मशीन पर यह फ़ोल्डर उदाहरण के लिए सी: \ उपयोगकर्ता \ जैकब \ AppData \ Local \ Temp \ hsperfdata_Jacob था। यह पता चला कि प्रक्रिया में उस फ़ोल्डर तक पहुंचने के लिए पर्याप्त अनुमति नहीं थी, इसलिए मैंने इसकी अनुमतियों को आराम दिया और अब यह ठीक काम करता है। उम्मीद है कि यह किसी भी समस्या के लिए उपयोगी है!

3

विंडोज़ पर, एक्लिप्स को प्रशासक के रूप में चलाएं।

+0

यह विंडोज 8 पर मेरे लिए बहुत अच्छा काम करता है। धन्यवाद एंड्रेस! –

+0

आपका स्वागत है। – Andres

0

यह एक गूंगा समाधान है, लेकिन काम करता है। यहां यह जाता है:

अपने एप्लिकेशन में एक अनंत लूप रैपर जोड़ें, "जबकि (सत्य) {your_app}" कहें।

आपके कार्यक्रम लंबे समय तक चलने के साथ ही समय शोर भी समाप्त हो जाएगा।