2011-08-26 5 views
6

मैं फ़िल्टर करना चाहता हूं कि जावा विजुअल वीएम (संस्करण 1.7.0 बी 110325) में सीपीयू-प्रोफाइल किस वर्ग में हैं। इसके लिए, मैंने परीक्षण के तहत अपने पैकेज में "प्रोफ़ाइल केवल" सेट करने के लिए प्रोफाइलर -> सेटिंग्स -> सीपीयू-सेटिंग्स के तहत प्रयास किया, जिसका कोई प्रभाव नहीं पड़ा। तब मैंने सभी जावा * * और सूरज से छुटकारा पाने की कोशिश की। * उन्हें में सेट करके कक्षाएं "प्रोफाइल नहीं करें, जिसका कोई प्रभाव नहीं पड़ा।जावा VisualVM में cpu प्रोफाइलिंग कार्य के लिए कक्षाओं को फ़िल्टर करना करता है?

क्या यह बस एक बग है? या क्या मैं कुछ न कुछ भूल रहा हूं? क्या आसपास कोई काम है? मेरा मतलब है अन्य की तुलना में:

  • एक बेहतर प्रोफाइलर
  • हाथ से नमूना कर के लिए भुगतान (देखें One could use a profiler, but why not just halt the program?)
  • कॉल ट्री दृश्य है, जो केवल प्रोफाइलर देखने के बाद से अच्छा नहीं है करने के लिए स्विच मुझे प्रतिशत देता है उपभोग सीपीयू प्रति विधि।

मैं इसे मुख्य रूप से खपत सीपीयू प्रति विधि के आधा रास्ते सही प्रतिशत प्राप्त करने के लिए करना चाहता हूं। इसके लिए, मुझे कष्टप्रद माप से छुटकारा पाना होगा, उदा। sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run() (लगभग 70%) के लिए। कई उपयोगकर्ताओं को यह समस्या प्रतीत होती है, उदाहरण के लिए देखें

+0

क्या यह संभव है कि कोड जितनी जल्दी हो सके कोड को चलाने का आपका उद्देश्य हो? या सिर्फ कुछ प्रतिशत प्राप्त करने के लिए, चाहे उनका क्या मतलब है? "समय" जैसा कि आमतौर पर उपयोग किया जाता है, अत्यधिक संदिग्ध है। –

+0

हां, मेरा मुख्य लक्ष्य कोड को तेजी से चला रहा है। मैं यह भी अनुमान लगा सकता हूं कि कोड में कितना परिवर्तन होना चाहिए। तो मैं सभी गर्म स्थानों और उनकी गंभीरता का एक अजीब अवलोकन प्राप्त करना चाहता हूं। मुझे लगता है कि दीवार समय का उपयोग करने के बावजूद विजुअल वीएम के परिणाम स्वीकार्य होंगे - अगर केवल कुछ ही सूर्य। * और जावा। * कक्षाएं सभी आंकड़ों को गड़बड़ नहीं करतीं। – DaveFar

उत्तर

10

प्रोफ़ाइल में sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run() देखने का कारण यह है कि आपने विकल्प विकल्प नया रननेबल्स चुना है। इस तरह से आप run() विधि से नेविगेट कर सकता है अपने स्वयं के आवेदन तर्क के तरीकों के लिए नीचे, शोर को छान -

इसके अलावा, अगर आप अपने रूपरेखा सत्र का एक स्नैपशॉट लिया आप किसी भी हॉटस्पॉट विधि के लिए पूरे callstack को देखने के लिए सक्षम हो जाएगा द्वारा उत्पादित नया रननेबल्स विकल्प।

+0

धन्यवाद जेबी (+5), मैं सोमवार को उस विकल्प की जांच करूंगा - समाधान की तरह लगता है :) मैंने एक स्नैपशॉट लिया, जिसने मुझे कॉल ट्री व्यू दिया, जो कि अच्छा नहीं है क्योंकि केवल प्रोफाइलर व्यू मुझे प्रतिशत देता है उपभोग सीपीयू प्रति विधि। रिकर्सन के कारण, मेरे कॉलस्टैक से समझदार प्रदर्शन जानकारी प्राप्त करने के लिए बहुत जटिल है। – DaveFar

+0

धन्यवाद जेबी, "प्रोफ़ाइल नए रननेबल" विकल्प को अक्षम करने से चाल चल रही है। – DaveFar

+2

कृपया उपर्युक्त विकल्प को अक्षम करने के परिणामों से अवगत रहें। विकल्प चालू होने के साथ आपको स्वचालित रूप से सभी नए प्रारंभ किए गए थ्रेड/रननेबल्स के बारे में जानकारी मिल जाएगी। उस विकल्प को बंद करने के साथ आपको रूट विधियों की विस्तृत सूची प्रदान करना सुनिश्चित करना होगा। –

0

ठीक है, क्योंकि आपका लक्ष्य जितना संभव हो सके कोड को चलाने के लिए है, मुझे सुझाव दें कि इसे कैसे करें। मैं VisualVM पर कोई विशेषज्ञ नहीं हूं, लेकिन मैं आपको बता सकता हूं कि क्या काम करता है। (केवल कुछ ही प्रोफाइलर वास्तव में आपको बता क्या आप जानना चाहते हैं, जो - जो अपने कोड की तर्ज पर ढेर दीवार-घड़ी समय की एक स्वस्थ अंश हैं।)

केवल मापने मैंने कभी है से परेशान कुल समय पर कुछ स्टॉपवॉच, या वैकल्पिक रूप से, यदि कोड में फ़्रेमेट की तरह कुछ है, प्रति सेकंड फ्रेम की संख्या। मुझे किसी भी प्रकार की सटीक ब्रेकडाउन की आवश्यकता नहीं है, क्योंकि यह समय बर्बाद करने के लिए सबसे अच्छा संकेत है (और अधिकतर पूरी तरह से अप्रासंगिक), जब इसका पता लगाने का एक बहुत ही सीधा तरीका है।

यदि आप random-pausing नहीं करना चाहते हैं, तो यह आपके ऊपर है, लेकिन यह काम करने के लिए साबित हुआ है, और here's an example of a 43x speedup

असल में, विचार यह है कि आपको यादृच्छिक दीवार-घड़ी के समय लिया गया स्टैक नमूने की संख्या (छोटी, जैसे 10) मिलती है। प्रत्येक नमूने में कॉल साइट्स की एक सूची (स्पष्ट रूप से) होती है, और संभवतः अंत में एक गैर-कॉल साइट होती है। (यदि नमूना I/O या नींद के दौरान होता है, तो यह सिस्टम कॉल में समाप्त हो जाएगा, जो ठीक है। यही वह है जिसे आप जानना चाहते हैं।)

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

मुझे हर प्रोफाइलर नहीं पता, लेकिन मुझे पता है कि आपको यह बता सकता है कि Zoom है। अन्य इसे करने में सक्षम हो सकते हैं। वे अधिक स्पिफी हो सकते हैं, लेकिन जब आपका उद्देश्य प्रदर्शन को अधिकतम करना है तो वे मैन्युअल विधि से किसी भी तेज या बेहतर काम नहीं करते हैं।

+0

कृपया, ध्यान रखें, कि JVM में ऐसा हो सकता है कि एक विधि कभी भी स्टैक ट्रेस पर दिखाई नहीं देगी, भले ही निष्पादित हो। इसका कारण यह है कि जेवीएम स्टैक निशान लेने की अनुमति देता है - धागे का एक स्टैक ट्रेस केवल चेकपॉइंट पर लिया जा सकता है जो कि प्रत्येक विधि में जेआईटी द्वारा डाला नहीं जा सकता है। –

+0

आप काफी "यादृच्छिक रुकने वाले प्रचारक" हैं, माइक :) धन्यवाद के लिए धन्यवाद, अगर मैंने पहले से ही उस तकनीक का वर्णन करने के लिए आपको कोई लिंक नहीं दिया होता तो मैं इसे उभारा होता। मैंने कोशिश की, लेकिन रिकर्सन की वजह से, कॉलस्टैक काफी जटिल है। एक प्रोफ़ाइल व्यू इसे रनटाइम के प्रतिशत के साथ विधियों में विभाजित करता है, इसलिए हॉट स्पॉट देखना बहुत आसान होता है। दूसरा, प्रोफ़ाइल दृश्य सभी गर्म स्थानों और उनकी गंभीरता दिखाता है। यह एक अच्छा अवलोकन देता है कि कितना और कितना ट्यूनिंग करना है। क्या आप सहमत हैं? – DaveFar

+0

@ डेवबॉल: यह हॉटस्पॉट और मापने के बारे में नहीं है। हां कॉल स्टैक जटिल है, और रिकर्सन है। फिर भी, देखें कि क्या आप इसे सभी चुन सकते हैं और उसे एक संपादक को कॉपी कर सकते हैं। फिर इसका अध्ययन करें और देखें कि क्या आप सरल सवाल का जवाब दे सकते हैं "उस समय करने की प्रक्रिया में यह क्या है और यह क्यों कर रहा है?" फिर इसे फिर से कुछ बार करें। यह आपको दिखाएगा कि यह समय क्यों व्यतीत कर रहा है, और यह आपको दिखाएगा कि आपको किस पर ध्यान देना चाहिए। रिकर्सन या जटिल स्टैक द्वारा बोया नहीं जाए। 3 में से 2 नमूने पर आप जो भी कोड देखते हैं, वह आपको (2 + 1)/(3 + 2) = 60% औसत पर खर्च कर रहा है। अच्छे शिकार। –

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