2012-07-10 14 views
8

मुझे निम्न समस्या है:
मैं टॉमकैट (लिनक्स) में एक वेब एप्लिकेशन तैनात करता हूं और टॉमकैट को बंद करने के बाद, यदि मैं ps -ef करता हूं तो भी मैं java प्रक्रिया चल रहा हूं।
मेरा मानना ​​है कि यह कुछ फांसी धागे के कारण होता है लेकिन मुझे नहीं पता कि मैं इस धागे को कैसे ट्रैक कर सकता हूं।
मैं इस मुद्दे को कैसे डीबग कर सकता हूं?मैं एक लटकते जावा थ्रेड को कैसे डिबग कर सकता हूं?

उत्तर

5

आप नीचे वर्णित अनुसार 4-5 थ्रेड डंप उत्पन्न कर सकते हैं और फिर उन्हें Samurai जैसे टूल का उपयोग करके विश्लेषण कर सकते हैं।

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

अब जब आप इन्हें Samurai के माध्यम से चलाते हैं, तो यह लाल रंग में इन्हें हाइलाइट करेगा ताकि आप जल्दी से उस पर क्लिक कर सकें और समस्याओं को दिखाते हुए लाइनों पर जा सकें।

इस here का एक उदाहरण देखें। उस लिंक में समुराई आउटपुट छवि को देखें। हरी कोशिकाएं ठीक हैं। लाल और ग्रे कोशिकाओं को देखने की जरूरत है। JVM एक कंसोल में चल रहा है तो बस Ctrl-\ प्रेस

(लिनक्स)

:

एक धागा डंप जनरेट कर रहा है। JVM पृष्ठभूमि में चल रहा है तो यह QUIT संकेत भेजने:

kill -QUIT process_id

वहाँ PROCESS_ID चल जावा प्रक्रिया की प्रक्रिया संख्या है। जहां भी मानक आउट रीडायरेक्ट किया जाता है वहां थ्रेड डंप भेजा जाएगा। आप आम तौर पर आदेश के साथ चल रहे सभी जावा प्रक्रियाओं की की प्रक्रिया नंबर प्राप्त कर सकते हैं: सही

ps axf | grep java

+0

इसकी नहीं है कि जिम के लिए पूछ रहा है, वह approch डीबगिंग के लिए पूछ रहा है –

+0

@ user1348753, संपादित करें। – aviad

+0

@aviad: मैंने 'मार -3' किया और समुराई को जावकोर लोड किया। कोई दृश्य तालिका नहीं थी सिर्फ एक लॉग रिपोर टी। मैं इस रिपोर्ट से धागे का पता कैसे लगा सकता हूं? – Jim

2

आप कहते हैं कि अपने जावा प्रक्रिया अभी भी मौजूद है,? प्रक्रिया तब तक मौजूद है जब तक वे धागे संलग्न करते हैं, है ना? यदि हां, तो मैं निम्नलिखित दृष्टिकोण के लिए जाना होगा: - MBean सर्वर संलग्न के साथ प्रक्रिया चलाने के लिए और JVM

द्वारा आंतरिक रूप से प्रबंधित तब प्रक्रिया से कनेक्ट आप संकेत छोड़ दी और धागा डंप मिल भेजने के बाद (वहाँ

कि के लिए एक JMX होना चाहिए। जो धागे आप के लिए संदिग्ध लग रही मिलते हैं। मुझे लगता है कि आप भी JVisualVM उपयोग कर सकते हैं धागा उदासीनता लेने के लिए ...

+0

मुझे नहीं पता कि आपके द्वारा सुझाए गए दृष्टिकोणों को कैसे करें – Jim

+0

यह और भी आसान लग रहा था, लेकिन यह था पहले से ही aviad द्वारा सुझाया गया :): http://www.crazysquirrel.com/computing/java/basics/java-thread-dump.jspx –

+0

JVisualVM दृष्टिकोण के लिए - यहां एक ट्यूटोरियल है http://docs.oracle.com /javase/6/docs/technotes/guides/visualvm/threads.html। असल में jvisualvm केवल एक निष्पादन योग्य फ़ाइल है जो $ JAVA_HOME/bin फ़ोल्डर में पाई जा सकती है ... इसे चलाएं, अपने एप्लिकेशन से कनेक्ट करें और देखें कि आप इसके साथ क्या कर सकते हैं। काफी शक्तिशाली सामान, वास्तव में :) –

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