2012-02-15 13 views
25

मैंने एक साधारण 1 फ़ाइल जावा एप्लिकेशन बनाया है जो एक लूप के माध्यम से पुनरावृत्त करता है, कुछ फ़ंक्शन कॉल करता है, कुछ मेमोरी आवंटित करता है, कुछ संख्याएं जोड़ता है, आदि। मैं उस एप्लिकेशन को ग्रहण के Run As->Java Application के माध्यम से चलाता हूं।विजुअलVM प्रोफाइलर मेरा आवेदन क्यों नहीं करेगा?

चल रहा एप्लिकेशन जावा VisualVM में Local के अंतर्गत दिखाई देता है।

मैं उस एप्लिकेशन पर डबल क्लिक करता हूं और प्रोफाइलर टैब पर जाता हूं।

डिफ़ॉल्ट सेटिंग्स हैं:

Start profiling from classes: my.main.package.**

Do not profile classes: java.*, javax.*, sun.*, sunw.*, com.sun.*

मैं CPU पर क्लिक करें। CPU और Memory बटन ग्रे आउट हो गए। कुछ नहीं हुआ।

Statusprofiling inactive कहता है।

जब मेरा एप्लिकेशन Status को application terminated कहता है।

मैं यहाँ क्या गलत कर रहा हूं? क्या कुछ सेटिंग्स हैं जिन्हें मुझे ट्विक करने की ज़रूरत है? जब मैं अपना आवेदन लॉन्च करता हूं तो क्या मुझे वीएम ध्वज सेट करने की ज़रूरत है?

+0

@ मिकवेली मैं इसे मानता हूं। हालांकि, जैसा कि मैंने नीचे वर्णित किया है, यह वास्तव में काम नहीं करता है। मैं अभी भी ग्रहण से लॉन्च किए गए किसी चीज़ पर 'jvisualvm' को इंगित करने के लिए' -J-D ... 'विकल्प का उपयोग करने में सक्षम नहीं हूं। मैं आपकी अंतर्दृष्टि और मदद करने के प्रयास की सराहना करता हूं, लेकिन दुख की बात है कि यह काम नहीं करता है। यह भी ध्यान रखें कि यह प्रश्न बंद कर दिया गया है। – Luke

+0

hsperfdata के बारे में नोट्स है जहां JVisualVM (और अन्य ऐप्स) प्रक्रिया प्रक्रिया प्राप्त करते हैं - सीखने से आपको और अन्य भविष्य में किसी भी समस्या को डीबग करने में मदद करेंगे। यदि '-J' विकल्प काम नहीं करता है, तो यह केवल इसलिए हो सकता है क्योंकि आपने इसे वास्तविक java.io.tmdir (ग्रहण मानक स्थान को ओवरराइड नहीं किया है) पर इंगित नहीं किया है। JVisualVM को JVM तर्कों को पारित करने का यह दस्तावेज तरीका है। जिस कारण से यह काम करता है, वह अब आपके द्वारा लॉग किए गए उपयोगकर्ता नाम के मामले के आधार पर वर्णित बग से संबंधित हो सकता है (फ़ोल्डर स्थान की केस-सेंसिटीविटी) जो 'स्वयं को ठीक करता है'। 15 प्रतिनिधि मूल्य? :) – Mikaveli

+1

मैं इस बंद होने से असहमत हूं, क्योंकि मेरे पास एक ही समस्या थी! मैंने भाग्य के बिना यहां सुझावों की कोशिश की, और अपना खुद का जवाब जोड़ना चाहता था: http://visualvm.java.net/eclipse-launcher.html पर, ग्रहण प्लगइन स्थापित करने से बेहतर हो सकता है। यह मेरे लिए काम किया। –

उत्तर

20

मुझे लगता है कि यह समस्या ग्रहण के भीतर से शुरू होने वाले एप्लिकेशन से संबंधित है, ऐसा इसलिए है क्योंकि JVisualVM java.io.tmpdir निर्देशिका में डेटा ढूंढने की अपेक्षा करता है (आमतौर पर C:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username] विंडोज सिस्टम पर)।

I सामान्य स्थान की बजाय मानें जहां जेपीएस, जेवीसुअलवीएम आदि अपेक्षा करता है, ग्रहण डेटा को अपने स्वयं के अस्थायी फ़ोल्डर में रखता है?

यदि ऐसा है, तो jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory] का उपयोग करके JVisualVM का आविष्कार करने का प्रयास करें ताकि स्पष्ट रूप से यह कह सके कि वह डेटा कहां है।

यदि आपको hsperfdata_$USER फ़ोल्डर नहीं मिल रहा है, तो सामान्य आदेश पंक्ति जावा मार्ग में एक्लिप्स के बाहर अपना एप्लिकेशन चलाने का प्रयास करें।

यह भी ध्यान दें कि 1.6.0_23 के आसपास पेश किए गए अस्थायी फ़ोल्डर (केस संवेदनशीलता) को प्रभावित करने वाली एक बग थी, तो शायद आपको हाल ही में जावा 6 (या 7) निर्माण को अपडेट करके लाभ होगा?

+1

मैं आपके सुझाव की सराहना करता हूं। -जे-डी विकल्प को जोड़ना (जे) विजुअलवम ने मुझे केवल एक त्रुटि दी है कि इसे स्थानीय जावा प्रक्रिया नहीं मिल सका। हालांकि, अब मैं वर्तमान में अपने मूल मुद्दे को पुन: उत्पन्न करने में असमर्थ हूं। प्रोफाइलर अब मेरे लिए ठीक काम कर रहा है ... – Luke

+0

आपको 'visualvm' निष्पादन योग्य (\ bin फ़ोल्डर में) का उपयोग करना होगा। '-J' विकल्प का अर्थ है JVM को पास करना - बाकी वाक्यविन्यास ठीक वैसे ही है जैसा आप सामान्य रूप से अपने JVM में तर्क जोड़ते हैं। – Mikaveli

+0

मुझे लगता है कि आपका मतलब है 'jvisualvm' लेकिन हाँ, मैंने यही किया। और जब यह लॉन्च होता है तो यह एक त्रुटि संवाद पॉपअप प्रदर्शित करता है जो कहता है कि 'स्थानीय जावा एप्लिकेशन का पता नहीं लगाया जा सकता है।' यह मुझे समस्या को ठीक करने के लिए अधिक जानकारी और चरणों के लिए VisualVM समस्या निवारण मार्गदर्शिका को संदर्भित करता है। – Luke

1

मैं एक ही मुद्दा था, लेकिन निम्नलिखित लक्षणों के साथ:

मैं सी में काम निर्देशिका के साथ घाट शुरू कर दिया,: \ Users \ t852124 \ AppData \ Local \ अस्थायी

घाट का निर्माण कर रहा hsperfdata_ निर्देशिका लेकिन इसमें एक प्रक्रिया आईडी सेट नहीं कर रहा है

तो जब मैंने विजुअलVM शुरू किया, तो उसे कोई जावा प्रक्रिया जानकारी नहीं मिली।

मैंने जेटी को -Djava.io.tmpdir = C:/temp/java विकल्प के साथ शुरू करके हल किया।

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

32

जावा जावा 1.7.0_45 अपडेट के बाद एक ही समस्या थी। मुझे निम्नलिखित फ़ोल्डर को हटाना पड़ा:

C:\users\'username'\AppData\Local\Temp\hsperfdata_'username' 

ऐसा करने के बाद, सब कुछ एक आकर्षण की तरह काम करता है।

+1

मुझे यह वही समस्या थी और बस एचडीडी गुणों पर चला गया -> डिस्क क्लीनअप और अस्थायी फ़ाइलों को हटाने के लिए चेक आउट किया गया, और डिस्क क्लीनअप चला गया और इसने इस मुद्दे का ख्याल रखा। यदि आप उपर्युक्त फ़ाइल के लिए शिकार नहीं करना चाहते हैं तो यह चाल भी करेगा। जानकारी के लिए – JonnyD91

+1

@ JonnyD91 thanx। – Kuba

+2

यह एकमात्र उत्तर है जो मेरे लिए काम करता है: वास्तव में * इस फ़ोल्डर को हटाएं। – Benj

1

मिकावेली, क्यूबा और सोमाया कुम्बर ने बहुत अच्छे समाधान प्रदान किए हैं। बस चीजों को काम करने के लिए मैंने जो किया है उसे जोड़ना।

मैंने पहली बार स्थान C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

ग्रहण के अंदर चल रहे मेरे प्रोग्राम की प्रक्रिया आईडी के साथ नामित कोई फ़ाइल नहीं थी।

मैं बस कार्यक्रम बंद कर दिया और कार्यक्रम के भागो विन्यास के लिए निम्न पैरामीटर जोड़ा (भागो विन्यास -> तर्क -> वीएम तर्क)

-Djava.io.tmpdir=C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

मैं कार्यक्रम फिर से शुरू कर दिया। अभी भी इसे प्रोफाइल नहीं कर सका। लेकिन अब मेरे पास दी गई temp निर्देशिका में प्रक्रिया के लिए बनाई गई एक फ़ाइल है।

फिर, विजुअलVM के एक सरल पुनरारंभ ने चाल की।

0

विजुअलVM 1.3.3 के साथ लिनक्स पर मुझे CPU प्रोफाइलर और सीपीयू नमूने को सक्षम करने के लिए ~/.visualvm/1.3.3/ में एप्लिकेशन की स्थानीय सेटिंग्स को हटाना होगा।

यह भी ध्यान दें कि/usr/bin/jvisualvm में OpenJDK (jdkhome चर के साथ सेट) के हार्डकोडेड पथ शामिल हैं, जो ओरेकल जेडीके 1.7 पर चलने की तुलना में बहुत से मुद्दों का कारण बनता है।

0

मुझे एक ही समस्या थी और उन्नत विशेषाधिकारों (व्यवस्थापक अधिकारों) के साथ VisualVM चलाने से समस्या हल हो गई।

0

यह भी ध्यान रखें कि यदि आपका एप्लिकेशन हाल ही में गैर-ओरेकल जेवीएम का उपयोग कर रहा है, तो आपको "bleeding edge" VisualVM from github डाउनलोड करने की आवश्यकता हो सकती है।

उदाहरण के लिए, जेडीके 1.8.0.111 के साथ बंडल किए गए विजुअलVM आईबीएम 1.8 जेवीएम के साथ काम नहीं कर रहा है। शायद आईबीएम जेवीएम को ओरेकल 1.8 जेवीएम के बाद रिलीज़ किया गया था, इसलिए उस समय आवश्यक परिवर्तनों को शामिल करना संभव नहीं था।

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