2009-12-07 11 views
6

मुझे एक जावा प्रोग्रामर के रूप में जो जेवीएम इंटर्नल्स के बारे में कुछ नहीं पता) क्या मुझे एक जेवीएम दुर्घटना में आना चाहिए?मुझे JVM क्रैश का निदान और रोकथाम कैसे करना चाहिए?

विशेष रूप से, आप एक पुन: उत्पन्न परीक्षण केस कैसे तैयार करेंगे? मुझे सूर्य के (या आईबीएम) बग डेटाबेस में क्या खोजना चाहिए? उत्पादित लॉग फ़ाइलों से मुझे कौन सी जानकारी मिल सकती है (उदा। hs_err_pidXYZ.log)?

+0

JVM दुर्घटनाओं बहुत अधिक दुर्लभ इन दिनों, यह है अब काफी गंभीर हैं। मैं यहां क्रैश होने पर लॉग के आउटपुट को पोस्ट करने का सुझाव देता हूं। – skaffman

उत्तर

7

यदि क्रैश केवल एक ही विशिष्ट मशीन होती है, तो memtest चलाएं। मैंने पुनरावर्ती जेवीएम क्रैश को केवल दो बार देखा है, और दोनों मामलों में अपराधी हार्डवेयर समस्या, अर्थात् दोषपूर्ण रैम बन गया।

+0

+1 प्रमुख उम्मीदवार होने के लिए +1। राम को सही करने में त्रुटि एक अच्छी बात है। –

+0

+1 अपने हार्डवेयर को ठीक करें। –

+0

स्वीकार करना क्योंकि यह कुछ ऐसा नहीं है जिसे मैंने माना था, और यह जवाब भी हो सकता है। –

0

जब कोई आईबीएम जेवीएम दुर्घटनाग्रस्त हो जाता है, तो हो सकता है कि फ़ाइल /tmp/dump_locations फ़ाइल में लिखा हो, इसमें लिखा गया है कि यह किसी भी हेपडम्प या जावा फाइलों को सूचीबद्ध करता है।

इन फ़ाइलों का विश्लेषण आईबीएम के अल्फावर्क्स से Java Core Analyzer और Java heapdump Analyzer का उपयोग करके किया जा सकता है।

+0

क्या ऐसा कुछ है जो मैं कर सकता हूं अगर मुझे JVM आंतरिक के बारे में कुछ भी पता नहीं है? –

+0

हां, विश्लेषकों जावा कोर और ऑब्जेक्ट पेड़ और जावा ढेर के लिए संभावित मेमोरी लीक के लिए धागे, ताले और संभावित डेडलॉक्स प्रस्तुत करते हैं। दोनों आपको परेशानी के स्रोतों के लिए इंगित कर सकते हैं। दोषपूर्ण हार्डवेयर के लिए – rsp

2

सूर्य क्रैश लॉग here का विवरण दस्तावेज करता है। here लिखा गया एक अच्छा ट्यूटोरियल भी है, यदि आप गंदे विवरण में प्राप्त करना चाहते हैं (ऐसा लगता है कि आप नहीं करते हैं, हालांकि)

हालांकि, एक टिप्पणीकर्ता के रूप में, एक जेवीएम दुर्घटना एक बहुत ही दुर्लभ और गंभीर है घटना, और इस स्थिति में सूर्य या आईबीएम पेशेवर समर्थन को कॉल करना फायदेमंद हो सकता है।

5
  1. मेरे अनुभव में वे हमेशा जेएनआई, या तो मेरा या किसी और का उपयोग करके देशी कोड के कारण होते हैं। यदि आप कर सकते हैं, तो देशी कोड के बिना फिर से चलने का प्रयास करें ताकि आप इसे पुन: पेश कर सकें या नहीं।

  2. कभी-कभी the JIT compiler turned off के साथ प्रयास करने के लायक है, यदि आपकी बग आसानी से पुन: उत्पन्न होती है।

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

  4. चूंकि जेवीएम दुर्घटनाएं दुर्लभ हैं, इसलिए मैं उन्हें सूर्य की रिपोर्ट करूंगा। यह उनके bug database पर किया जा सकता है। श्रेणी जावा एसई, उपश्रेणी jvm_exact या jit का प्रयोग करें।

  5. यूनिक्स/लिनक्स के तहत आपको कोर डंप मिल सकता है। विंडोज़ के तहत जेवीएम आमतौर पर आपको बताएगा कि उसने क्या किया है इसका लॉग संग्रह किया है। इन फ़ाइलों को अक्सर कुछ संकेत दिया जाता है, लेकिन JVM से JVM में भिन्न होगा। सूर्य इन फ़ाइलों का पूरा विवरण देता है on their website। या आईबीएम फाइलों का विश्लेषण आईबीएम के अल्फावॉर्क्स से Java Core Analyzer और Java heapdump Analyzer का उपयोग करके किया जा सकता है।

  6. दुर्भाग्य से मेरे अनुभव में जावा डिबगर्स मदद से अधिक चोट पहुंचाते हैं। हालांकि, यदि आप सी स्टैक निशान पढ़ने से परिचित हैं तो ओएस विशिष्ट डीबगर (जैसे विजुअल स्टूडियो) को जोड़ना आपकी मदद कर सकता है।

पुन: उत्पन्न परीक्षण केस प्राप्त करने का प्रयास करना मुश्किल है। यदि आपके पास बड़ी मात्रा में कोड है जो हमेशा (या लगभग हमेशा) दुर्घटनाग्रस्त हो जाता है तो यह आसान होता है, धीरे-धीरे धीरे-धीरे हिस्सों को हटा देता है, जबकि यह संभवतः छोटा हो जाता है। यदि आपके पास कोई पुन: उत्पादित परीक्षण कोड नहीं है तो यह बहुत मुश्किल है। मैं उपरोक्त मेरे क्रमांकित चयन से संकेत प्राप्त करने का सुझाव दूंगा।

0

इस प्रकार की समस्याओं का निवारण करने के लिए Oracle website पर एक शानदार पृष्ठ है।

बाहर चेक के लिए प्रासंगिक वर्गों: (। जैसे jstack उपयोगिता)

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