मेरा जावा एप्लिकेशन नियमित रूप से एक SIGSEGV और स्टैक डेटा के डंप और टेक्स्ट फ़ाइल में जानकारी का एक लोड के साथ क्रैश करना शुरू कर दिया है।जब मैं अपना कोड चलाता हूं तो JVM में होने वाले सेगफाल्ट को कैसे डिबग कर सकता हूं?
मैंने जीडीबी में सी प्रोग्राम डीबग किया है और मैंने अपने आईडीई से जावा कोड डीबग किया है। मुझे यकीन नहीं है कि चल रहे जावा प्रोग्राम में सी-जैसे क्रैश कैसे पहुंचे।
मुझे लगता है कि मैं यहां एक जेवीएम बग नहीं देख रहा हूं। अन्य जावा प्रोग्राम ठीक चलते हैं, और सूर्य से जेवीएम शायद मेरे कोड से अधिक स्थिर है। हालांकि, मुझे नहीं पता कि मैं जावा कोड के साथ segfaults कैसे पैदा कर सकता हूं। निश्चित रूप से पर्याप्त स्मृति उपलब्ध है, और जब मैंने प्रोफाइलर में आखिरी बार चेक किया था, तो 80% के आसपास कभी-कभी स्पाइक्स के साथ ढेर का उपयोग लगभग 50% था। क्या कोई स्टार्टअप पैरामीटर है जो मैं जांच सकता हूं? इस तरह की बग के पास आने पर एक अच्छी चेकलिस्ट क्या होती है?
हालांकि मैं इस कार्यक्रम को विश्वसनीय रूप से पुन: उत्पन्न करने में सक्षम नहीं हूं, ऐसा लगता है कि यह पूरी तरह से यादृच्छिक रूप से नहीं होता है, इसलिए परीक्षण पूरी तरह असंभव नहीं है।
अनुमानित समय। रक्तमय विवरण
(मैं एक सामान्य दृष्टिकोण के लिए देख रहा हूँ, क्योंकि वास्तविक समस्या बहुत विशिष्ट हो सकता है में से कुछ फिर भी, कुछ जानकारी मैं पहले से ही एकत्र है और इस बात का हो सकता है कुछ मूल्य।)
एक समय पहले, मैं अपने सीआई सर्वर (अधिक जानकारी के लिए here देखें) अपग्रेड करने के बाद एक समान दिखने वाले मुसीबत था, लेकिन है कि ठीक (-XX:MaxPermSize
करना) इस समय मदद नहीं की।
आगे की जांच से पता चला कि क्रैश लॉग फाइलों में "थ्रेड" के रूप में चिह्नित थ्रेड मेरा कभी भी नहीं है, लेकिन किसी को भी "वीएम थ्रेड" या जिसे "जीसीटीस्क थ्रेड" कहा जाता है - मैं इसे बाद वाला हूं, यह अतिरिक्त है टिप्पणी के साथ चिह्नित "(बाहर निकला)", यदि यह पूर्व है, तो GCTaskThread सूची में नहीं है। इससे मुझे लगता है कि समस्या जीसी ऑपरेशन के अंत में हो सकती है।
क्या आप एक स्टैक ट्रेस प्राप्त कर सकते हैं? क्या यह एक ही स्थान पर एसईजीवी है? क्या हमारे पास काम करने के लिए और जानकारी हो सकती है? –
क्या आपके आवेदन में कोई मूल कोड है? यदि JVM बाइटकोड के किसी भी संग्रह की अनुमति देता है, इससे कोई फर्क नहीं पड़ता कि बाइटकोड कैसे हो सकता है, एक segfault को उत्तेजित करने के लिए, फिर _ वास्तव में आप एक JVM (या JRE) बग को देख रहे हैं। –
@Ed - मेरे पास बहुत सारे स्टैक ट्रेस हैं, लेकिन यह टेक्स्ट की एक विशाल दीवार है। पोस्ट करने के लिए कौन सा हिस्सा सबसे उपयोगी होगा? मैं मुख्य रूप से इस प्रकार की समस्या से संपर्क करने के लिए एक सामान्य तरीका ढूंढ रहा हूं, इसलिए मैं यहां बहुत विशिष्ट जानकारी के भार को डंप करने में संकोच नहीं कर रहा हूं। –