2010-09-09 10 views
8

मैं करने के लिएचल रहे JVM पर jstack निष्पादित करने के लिए कितना महंगा है?

  1. रन हर एक मिनट में (या हर पाँच मिनट) उत्पादन में एक चल JVM के खिलाफ
  2. रन jstack एक स्क्रिप्ट अप सजा
  3. jstack उत्पादन को पार्स करने और चीजों को मिलान पर विचार कर रहा हूँ मैं 'किसी अन्य सर्वर

पर एक केंद्रीकृत कैक्टस स्थापना से 24/365 ग्राफ़ बनाने के लिए में

  • निर्यात रुचि परिणाम रहा हूँ लेकिन मैं कैसे महंगा या Invasi के रूप में कोई सुराग नहीं है ve jstack चल रहे JVM पर है। चल रहे JVM पर jstack निष्पादित करना कितना महंगा है? क्या मैं खुद को चोट की दुनिया के लिए स्थापित कर रहा हूं?

  • +0

    क्या आपने मापने पर विचार किया है? –

    +0

    एक अलग प्रक्रिया के रूप में jstack चलाने के बजाय, एप्लिकेशन के भीतर एक सरल प्रोफाइलर चलाने के बारे में क्या? यह अधिक कुशल होगा, क्योंकि कोई नेटवर्क ओवरहेड की आवश्यकता नहीं है। मैंने ऐसा टूल लिखा: http://code.google.com/p/h2database/source/browse/trunk/h2/src/main/org/h2/util/Profiler.java - आप इसे एक में भी परिवर्तित कर सकते हैं। यदि आवश्यक हो तो जेएसपी। –

    +0

    @ Thorbjørn Ravn Andersen: क्षमा करें? –

    उत्तर

    0

    धागे की संख्या और आपके ढेर के आकार के आधार पर, जेस्टैक संभवतः काफी महंगा हो सकता है। जेस्टैक समस्या निवारण के लिए है और आंकड़ों को इकट्ठा करने के लिए डिज़ाइन नहीं किया गया था। स्टैक निशान का विश्लेषण करने के बजाय, उपकरण पर कुछ रूपों का उपयोग करना या जेएमएक्स इंटरफ़ेस का खुलासा करना बेहतर हो सकता है, ताकि आप सीधे जानकारी प्राप्त कर सकें।

    +0

    1000 धागे, <1 जीबी ढेर। मुझे jstack माना जाता है क्योंकि मुझे पता है और जल्दी से लागू कर सकते हैं। जेएमएक्स, जबकि एक व्यावहारिक विकल्प, कुछ अनुकरण लेने जा रहा है। –

    3

    माप।

    ravn:~ ravn$ /usr/bin/time -p echo Hello World 
    Hello World 
    real   0.32 
    user   0.00 
    sys   0.00 
    ravn:~ ravn$ 
    

    इसका मतलब यह है कि यह 0.32 सेकण्ड लगे दीवार समय, 0.00 सेकंड का उपयोग कर: time वेरिएंट में से एक (/ usr/bin/समय मेरा मानना ​​है कि) जो आप देखना CPU संसाधनों का इस्तेमाल किया की अनुमति देता है एक -p का विकल्प है उपयोगकर्ता अंतरिक्ष में सीपीयू समय और कर्नेल अंतरिक्ष में 0.00 सेकंड का।

    एक परीक्षण परिदृश्य बनाएं जहां आपके पास कोई प्रोग्राम चल रहा है लेकिन कुछ भी नहीं कर रहा है, और उपयोग के साथ तुलना करने की कोशिश करें और बिना किसी jstack अटैचमेंट के हर पल। फिर आपके पास कठिन संख्याएं हैं और यह देखने के लिए प्रयोग कर सकते हैं कि उचित ओवरहेड क्या होगा।

    मेरा झुकाव यह होगा कि प्रत्येक पांच मिनट में उपेक्षित हो जाने पर।

    +0

    ठीक है: वास्तविक 0.54, उपयोगकर्ता 0.51, sys 0.07 एक हल्के ढंग से लोड सिस्टम पर। आज बाद में कोशिश करेंगे। इसके अलावा कितना समय लगता है, जेवीएम पर जेस्टैक पर क्या असर पड़ता है? एक सब बंद करो? –

    +0

    अपने आवेदन को मापने के लिए याद रखें, जेस्टैक आमंत्रण नहीं। –

    +0

    यह एक वेब ऐप है जो टोमकैट में चल रहा है। हमम ... शायद मुझे एक लूप में जेस्टैक चलाया जाना चाहिए, और जावा टॉमकैट प्रक्रिया के सीपीयू उपयोग के साथ प्रति मिनट इनवोकेशन की संख्या की तुलना करना चाहिए। धन्यवाद यह सुझाव दे रहा है और इसे सोचने में मदद करता है। –

    3

    मैं जानता हूँ कि क्या यह उत्तर पार्टी के लिए देर हो चुकी है लेकिन jstack की महंगी हिस्सा डिबगर इंटरफेस के लिए संलग्न आम तौर पर एक महत्वपूर्ण अपवाद के साथ स्टैक ट्रेस नहीं पैदा कर रहा से आता है (और ढेर आकार बात बिल्कुल भी नहीं करता है):

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

    डीबगिंग इंटरफ़ेस से जुड़ने से बचने वाले जेस्टैक की तुलना में एक और विकल्प: थ्रेड.getAllStackTraces() या थ्रेडएमएक्सबीन का उपयोग करके, इसे प्रक्रिया में चलाएं, फ़ाइल में सहेजें और उस फ़ाइल को मतदान करने के लिए बाहरी टूल का उपयोग करें।

    अंतिम नोट: मुझे जेस्टैक पसंद है, यह उत्पादन प्रणाली पर बहुत अधिक है।

    +0

    +1 मुझे पीछा करने के लिए +1;) लेकिन गंभीरता से, उत्तर के लिए धन्यवाद। –

    +0

    @StuThompson, मैं इसका उत्तर देने के इच्छुक हूं: http://stackoverflow.com/questions/3651737/why-the-odd-performance-curve-differential-between-bytebuffer-allocate-and-by संक्षिप्त उत्तर है कि गैर-प्रत्यक्ष बफर वास्तविक आईओओ के लिए चूसते हैं, अगर आपको अधिक विस्तृत जानकारी की आवश्यकता है, तो मैं कोशिश कर सकता हूं ... मैं ज्यादा पोस्ट नहीं करता हूं और मैं उन लोगों की प्रोफाइल जांचता हूं जिनके पदों ने मुझे रूचि दी है। इस सवाल पर कोई चयनित उत्तर नहीं था इसलिए मुझे उम्मीद थी कि मैं इसे प्रबुद्ध कर सकता हूं। – bestsss

    +0

    उम, मैं * "गैर-प्रत्यक्ष bufferes चूसना" * से कुछ और की तलाश में था ... ... ऐसा कुछ है जो मैंने खुद को बेंचमार्क के साथ बहुत अच्छी तरह से दस्तावेज किया है;) मैं चट्टान में विसंगतियों के बारे में वास्तव में उत्सुक हूं। –

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