2011-12-09 5 views
9

में जावा जावा प्रक्रिया का नाम गुम है, मैं जावा का उपयोग करके एक एल्गोरिदम कार्यान्वयन लिख रहा हूं। ओएस एक्स 10.7 तक, मैंने शार्क प्रोफाइलर का उपयोग मेरे कार्यान्वयन को प्रोफाइल करने के लिए किया, जो कि अच्छी तरह से काम करता था। हालांकि, नए उपकरण अब प्रक्रिया के नाम नहीं मिलते हैं। मैंने शार्क (अर्थात्, -एन्टेंटिब: शार्क) के लिए वीएम तर्कों के साथ जावा एप्लिकेशन चलाने की कोशिश की है, लेकिन वे 10.7 के लिए अज्ञात हैं, और मुझे उपकरणों के लिए ऐसा एजेंटलिब नहीं मिला।टाइम प्रोफाइलर, इंस्ट्रूमेंट्स, ओएस एक्स

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

धन्यवाद!

संपादित करें: अब तक, ओएस एक्स माउंटेन शेर के साथ कुछ भी नहीं बदला है।

संपादित # 2: (?) सेब के बग रिपोर्टर के माध्यम से एक डेवलपर की ओर से एक अद्यतन:

dtrace जावा के लिए किया गया है समर्थन, अतीत में बिंदुओं पर स्टैक हालांकि मैं ईमानदारी से नहीं है कि क्या समर्थन कह सकते हैं बनाए रखा गया है। यह मापने की कोशिश कर रहे हैं कि यह एक व्यावहारिक कामकाज हो सकता है - जो इस बिंदु पर प्रदर्शन उपकरण के लिए अन्यथा प्राथमिकता नहीं है। आप /usr/bin/cpu_profiler.d में डी स्क्रिप्ट के साथ शुरू करना चाहते हैं और इसे jstack भी एकत्रित करने के लिए संशोधन कर सकते हैं।

संपादित करें # 3: ठीक है, कुछ और चर्चा के बाद यह पता चला कि डेवलपर को यह नहीं पता था कि वह स्क्रिप्ट कहां से आई थी। इसके अलावा, इंस्ट्रूमेंट्स में समय प्रोफाइलर किसी भी तरह डीटीआरएस का उपयोग नहीं करता है, इसलिए केवल एक ही विकल्प छोड़ दिया गया है जो हमारी खुद की डीटीआरएस स्क्रिप्ट या उपकरण लिखना है।

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

लोग जो कहते हैं उसके बावजूद, उपकरण सब कुछ के लिए डीटीआरएस का उपयोग नहीं करते हैं, विशेष रूप से समय प्रोफाइलिंग, इसलिए मैं आपको उपकरण यूआई में त्वरित सुधार नहीं दे सकता।

उत्तर

5

उपकरण निर्भर करता है पर सूर्य द्वारा विकसित सुंदर सॉफ्टवेयर का एक सा dtrace कहा जाता है। dtrace एक समारोह कहा जाता है 'jstack()' कि जावा प्रतीकों के साथ एक स्टैक ट्रेस मुद्रित करने के लिए माना जाता है है, वहाँ भी एक 'ustack()' है कि अन्य भाषाओं (अजगर, Node.js, आदि के लिए इसी तरह के काम करने के लिए माना जाता है है)। दुर्भाग्यवश ओएस एक्स का डीट्रैस का संस्करण उन तरीकों का समर्थन नहीं करता है और ऐसे उपकरण इस कार्यक्षमता को प्रदान नहीं करेंगे।

तो, दुर्भाग्य से आप नहीं उन उपकरणों से कि जानकारी पाने के लिए जब तक एप्पल उनके सामान को ठीक करता जा रहे हैं। :(

अधिक जानकारी के लिए इस सूत्र का पालन करें: http://www.mail-archive.com/[email protected]/msg04863.html

मैं सहायक ढेर ट्रेसर के लिए समर्थन की कमी के बारे में सेब के साथ एक बग दायर किया है, अगर आप इस कार्यक्षमता चाहते हैं आप भी बग के बारे में होना चाहिए: https://bugreport.apple.com

+0

ग्रेट, धन्यवाद। मुझे उम्मीद है कि यह जल्द ही तय हो जाएगा, हालांकि बग काफी समय से आसपास रहा है। मैं एक बग रिपोर्ट फाइल करूंगा। – HdM

+0

तो, मुझे एक डेवलपर से एक अपडेट मिला जो निम्न को पढ़ता है: "अतीत में बिंदुओं पर जावा स्टैक के लिए ड्रेट्रस का समर्थन था, हालांकि मैं ईमानदारी से यह नहीं कह सकता कि समर्थन बनाए रखा गया है या नहीं। यह एक व्यावहारिक कामकाज हो सकता है जो आप मापने की कोशिश कर रहे हैं - जो इस बिंदु पर प्रदर्शन टूल के लिए अन्यथा प्राथमिकता नहीं है। आप /usr/bin/cpu_profiler.d में डी स्क्रिप्ट से प्रारंभ करना चाहते हैं और इसे जेस्टैक को इकट्ठा करने के लिए भी संशोधन कर सकते हैं । " – HdM

+0

मुझे यह जानने में बहुत दिलचस्पी होगी कि आपको कुछ भी काम मिल रहा है या नहीं। –

0

एक बात यह है कि मेरे दिमाग में आता है javac संकलक को -g विकल्प डिबगिंग जानकारी शामिल करने के लिए है। ग्रहण (कम से कम हेलीओस में) में आप 'जावा कंपाइलर', 'क्लासफाइल जनरेशन' के तहत डेटा डीबग करने के लिए अलग-अलग विकल्प सेट कर सकते हैं। हो सकता है कि उनमें से कुछ सेटिंग्स उलझ गईं।

हालांकि, यह विधि नामों के साथ समस्या को हल नहीं करता है, जो हमेशा कक्षा फ़ाइलों में शामिल होते हैं। फिर भी, जावा वीएम के विभिन्न स्वाद विभिन्न तरीकों से रनटाइम-ऑप्टिमाइज़ेशन करते हैं, उदाहरण के लिए दस्तावेज़ों में stack traces की विश्वसनीयता पर नोट देखें।

इसलिए, दूसरे (संस्करण) वीएम पर स्विच करने से प्रोफाइलर की सही चीज़ करने की क्षमता पर असर पड़ सकता है। - वैसे, आपने प्रक्रिया में अपने जावा संस्करण (उदाहरण के लिए 1.6 से 1.7) को 'अपग्रेड' नहीं किया था?

+1

मैं एक गैर सेब जावा संस्करण में नवीनीकृत किया था। हालांकि जहां तक ​​मुझे पता है, यह "बग" हमेशा कायम है, और याद आ रही "worksforme" पदों से संकेत मिलता है यह शायद वी एम के साथ कुछ नहीं किया है। मुझे लगता है कि यह और भी है – HdM

0

यदि आप जावा एप्लिकेशन प्रोफाइल करना चाहते हैं, तो मैं आपको ओरेकल (जावानेट के माध्यम से) से Visualvm का उपयोग करने की सलाह देता हूं।यह टूल दूरस्थ JVMs के लिए भी विधि में स्मृति और cpu को प्रोफ़ाइल कर सकता है। पर OSX यह स्पष्ट नहीं डिफ़ॉल्ट JDK का हिस्सा है, लेकिन आप इसे यहाँ प्राप्त कर सकते: http://visualvm.java.net/download.html शार्क के लिए एक विकल्प हो सकता है।

+0

एक dtace हुक खोजने अगर किसी समस्या के। मैं VisualVM कोशिश की, लेकिन मैं इसके साथ अत्यधिक असंतुष्ट हूँ। शार्क या उपकरणों के साथ तुलना में, यह भद्दा है, हास्यास्पद भूमि के ऊपर है और यह बहुत difficul है ग्रहण प्लगइन के साथ भी शुरू करने के लिए टी। मेरे लिए यह एक विकल्प नहीं है। – HdM