2011-01-11 21 views
40

मेरे एप्लिकेशन लॉग में (log4j का उपयोग करके), मुझे एक NullPointerException दिखाई देता है, लेकिन स्टैक ट्रेस के बिना। मुझे पता है कि एक अनुकूलन के रूप में, जब एक अपवाद कई बार होता है - जेवीएम स्टैक ट्रेस का उत्पादन बंद कर देता है। समस्या कुछ समय पहले अपवाद हुआ था, और मेरे सभी लॉग स्टैक ट्रेस के बिना अपवाद से भरे हुए हैं। क्या इस तंत्र को "रीसेट" करने का कोई तरीका है, इसलिए अगला फेंक दिया गया अपवाद पूर्ण स्टैक ट्रेस के साथ मुद्रित किया जाएगा? मैं एप्लिकेशन को पुनरारंभ नहीं करना चाहता, क्योंकि इस बग को पुन: उत्पन्न करना मुश्किल है, और पुनरारंभ करने से "दूर जाना" हो सकता है ...एक स्टैक ट्रेस के बिना पुनरावर्ती अपवाद - रीसेट कैसे करें?

धन्यवाद!

+1

"मुझे पता है कि एक अनुकूलन के रूप में, जब एक अपवाद कई बार होता है - जेवीएम स्टैक ट्रेस का उत्पादन बंद कर देता है"। आप यह कैसे जानते हैं? यह सच नहीं है। – skaffman

+0

यह कैच ब्लॉक की वजह से हो सकता है केवल अपवाद का कारण लॉग किया गया है –

+3

हां यह अनुकूलन का प्रकार है - @ डोगबेन का उत्तर देखें। @ जिगार - यह लॉगिंग से संबंधित नहीं है, अपवाद के पास कोई स्टैक ट्रेस नहीं है। – duduamar

उत्तर

66

निम्नलिखित JVM संपत्ति के साथ चलाने की कोशिश करें:

-XX:-OmitStackTraceInFastThrow 

Release Notes से:

सर्वर वीएम अब सभी "ठंडा" के लिए सही स्टैक बैकट्रैस प्रदान करता है में संकलक में निर्मित अपवाद नहीं। प्रदर्शन उद्देश्यों के लिए, जब अपवाद कुछ बार फेंक दिया जाता है, तो विधि को फिर से सम्मिलित किया जा सकता है। पुनर्मूल्यांकन के बाद, कंपाइलर प्रीलोकेटेड अपवादों का उपयोग कर एक तेज़ रणनीति चुन सकता है जो एक स्टैक ट्रेस प्रदान नहीं करता है। प्रीलाओटेड अपवादों के पूरी तरह से का उपयोग अक्षम करने के लिए, इस नया ध्वज का उपयोग करें: -XX:-OmitStackTraceInFastThrow

+2

धन्यवाद, यह अच्छा लगता है। क्या चल रहे जावा प्रक्रिया के लिए इस ध्वज को फ्लाई पर सक्षम करना संभव है? – duduamar

+0

@duduamar मैं निश्चित रूप से नहीं जानता, लेकिन मेरा अनुमान है कि आप नहीं कर सकते हैं। – dogbane

+1

@duduamar: रनटाइम पर इस ध्वज को बदलने के लिए अब एक खुला टिकट है - [जेडीके -8046503 - ओमिटस्टैकट्रेसइनफास्ट थ्रो काउंटर को रीसेट करने की क्षमता] (https://bugs.openjdk.java.net/browse/JDK-8046503)। हालांकि अभी भी खुला है। – sleske

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