हमारे पास एक ऐसा एप्लिकेशन है जो हमारे उपयोगकर्ताओं की तरफ से नए जेवीएम को फैलाता है और कोड निष्पादित करता है। कभी-कभी स्मृति से बाहर निकलते हैं, और उस मामले में बहुत अलग तरीकों से व्यवहार करते हैं। कभी-कभी वे आउटऑफमेमरी एरर फेंकते हैं, कभी-कभी वे फ्रीज करते हैं। मैं बाद में बहुत हल्के पृष्ठभूमि थ्रेड द्वारा पता लगा सकता हूं जो स्मृति पर कम चलते समय दिल की धड़कन संकेत भेजना बंद कर देता है। उस स्थिति में, हम JVM को मार देते हैं, लेकिन हम कभी भी पूरी तरह से सुनिश्चित नहीं हो सकते कि दिल की धड़कन प्राप्त करने में विफल होने का वास्तविक कारण क्या था। (यह एक नेटवर्क मुद्दा या सेगमेंटेशन गलती भी हो सकती है।)जावा में स्मृति स्थितियों को संभालने का सबसे अच्छा तरीका क्या है?
JVM में स्मृति स्थितियों से भरोसेमंद तरीके से पता लगाने का सबसे अच्छा तरीका क्या है?
सिद्धांत रूप में, -XX: OnOutOfMemoryError विकल्प होनहार लग रहा है, लेकिन यह इस बग के कारण प्रभावी रूप से व्यर्थ है: https://bugs.openjdk.java.net/browse/JDK-8027434
एक OutOfMemoryError पकड़ने वास्तव में अच्छी तरह से ज्ञात कारणों के लिए एक अच्छा विकल्प नहीं है (उदाहरण के लिए आप कभी नहीं जानते कि यह कहां होता है), हालांकि यह कई मामलों में काम करता है।
जो मामले रहते हैं वे हैं जहां जेवीएम फ्रीज करता है और आउटऑफमेमरी एरर नहीं फेंकता है। मुझे अभी भी यकीन है कि स्मृति इस समस्या का कारण है।
क्या कोई विकल्प या कामकाज है? कचरा संग्रहण सेटिंग्स जेवीएम को फ्रीज करने के बजाय खुद को समाप्त करने के लिए?
संपादित करें: मैं फोर्किंग और फोर्क किए गए जेवीएम दोनों के पूर्ण नियंत्रण में हूं और साथ ही साथ कोड को निष्पादित किया जा रहा है, दोनों लिनक्स पर चल रहे हैं, और यदि यह मदद करता है तो ओएस विशिष्ट उपयोगिताओं का उपयोग करना ठीक है।
ऐसा लगता है कि आप वास्तव में रुचि रखते हैं कि यह पता लगा रहा है कि * एक और प्रक्रिया * में बाहर की स्मृति कब हुई है; एक महत्वपूर्ण बिंदु जिसे आपके प्रश्न के शीर्षक से भी संकेत नहीं दिया गया है। – supercat
धन्यवाद। मैंने इस पोस्ट में और अधिक स्पष्ट करने की कोशिश की, लेकिन मैंने अभी तक शीर्षक नहीं बदला है, क्योंकि सभी वैकल्पिक खिताब मैं आने में सक्षम था, भ्रामक थे। विशेष रूप से मुझे कोई फर्क नहीं पड़ता कि क्या हम JVM को कॉल करने से JVM के अंदर से जानकारी प्राप्त करते हैं, इसे अपने विशिष्ट व्यवहार के साथ JVM के रूप में देखकर, या इसे केवल प्रक्रिया के रूप में देखकर। –
यदि आप अपना शीर्षक सुधार नहीं पाते हैं, तो बहुत से लोग जो उत्तर देने में सक्षम हो सकते हैं, वे आपकी पोस्ट को खोलने की संभावना नहीं रखते हैं। शायद "जावा वीएम प्रक्रिया मेमोरी से बाहर होने पर अलार्म ट्रिगर करना" बेहतर शीर्षक होगा? – supercat