मैं जानता हूँ कि क्या यह उत्तर पार्टी के लिए देर हो चुकी है लेकिन jstack की महंगी हिस्सा डिबगर इंटरफेस के लिए संलग्न आम तौर पर एक महत्वपूर्ण अपवाद के साथ स्टैक ट्रेस नहीं पैदा कर रहा से आता है (और ढेर आकार बात बिल्कुल भी नहीं करता है):
मनमानी स्टैक निशान केवल एक सुरक्षित बिंदु पर या धागा इंतजार कर रहा है (यानी जावा स्कोप के बाहर) उत्पन्न किया जा सकता है। यदि थ्रेड जावा स्कोप के बाहर/बाहर इंतजार कर रहा है तो थ्रेड का अनुरोध करने वाला स्टैक अपने आप को स्टैक चलने से कार्य करेगा। हालांकि, हो सकता है कि आप अपने धागे को चलने के लिए धागे को "बाधित" नहीं करना चाहें, जबकि यह लॉक हो रहा हो (या कुछ व्यस्त प्रतीक्षा कर रहा हो)। चूंकि सुरक्षित बिंदुओं को नियंत्रित करने का कोई तरीका नहीं है - इसलिए जोखिम पर विचार करने की आवश्यकता है।
डीबगिंग इंटरफ़ेस से जुड़ने से बचने वाले जेस्टैक की तुलना में एक और विकल्प: थ्रेड.getAllStackTraces() या थ्रेडएमएक्सबीन का उपयोग करके, इसे प्रक्रिया में चलाएं, फ़ाइल में सहेजें और उस फ़ाइल को मतदान करने के लिए बाहरी टूल का उपयोग करें।
अंतिम नोट: मुझे जेस्टैक पसंद है, यह उत्पादन प्रणाली पर बहुत अधिक है।
क्या आपने मापने पर विचार किया है? –
एक अलग प्रक्रिया के रूप में jstack चलाने के बजाय, एप्लिकेशन के भीतर एक सरल प्रोफाइलर चलाने के बारे में क्या? यह अधिक कुशल होगा, क्योंकि कोई नेटवर्क ओवरहेड की आवश्यकता नहीं है। मैंने ऐसा टूल लिखा: http://code.google.com/p/h2database/source/browse/trunk/h2/src/main/org/h2/util/Profiler.java - आप इसे एक में भी परिवर्तित कर सकते हैं। यदि आवश्यक हो तो जेएसपी। –
@ Thorbjørn Ravn Andersen: क्षमा करें? –