मैं जावा में यह अपवाद हो रही है:बहुत अधिक फ़ाइलें खुली: कितने खुले हैं कि वे क्या कर रहे हैं, और कितने सकते हैं JVM खुला
java.io.FileNotFoundException: (Too many open files)
मैं तरीके इस को खत्म करने के लिए देख रहा हूँ मुसीबत।
यह त्रुटि स्पष्ट रूप से इंगित करती है कि जेवीएम ने बहुत से हैंडल आवंटित किए हैं और अंतर्निहित ओएस इसे और अधिक नहीं होने देगा। या तो मुझे अनुचित बंद कनेक्शन/धाराओं के साथ कहीं रिसाव मिल गया है।
यह प्रक्रिया गैर-स्टॉप के दिनों तक चलती है और अंततः अपवाद फेंकता है। यह बार-बार 12-14 दिनों के बाद होता है।
आप इससे कैसे लड़ते हैं? क्या JVM में आवंटित हैंडल की सूची प्राप्त करने का कोई तरीका है या जब यह निश्चित राशि को ट्रैक करता है तो ट्रैक करें? मुझे उन्हें मुद्रित करना अच्छा लगेगा और देखें कि यह कैसे बढ़ता है और कब। मैं एक प्रोफाइलर का उपयोग नहीं कर सकता क्योंकि यह एक उत्पादन प्रणाली है और इसे विकास में पुन: उत्पन्न करने में कठिनाइयां हैं। कोई उपाय?
मैं मुक्त ढेर आकार की निगरानी कर रहा हूं और "अलार्म" उठा रहा हूं जब यह कुल निर्दिष्ट एक्सएक्स में 1% तक पहुंचता है। मुझे यह भी पता है कि अगर मेरी थ्रेड गिनती 500 से ऊपर हिट हो जाती है, तो कुछ निश्चित रूप से हाथ से बाहर हो जाता है। अब, यह जानने का कोई तरीका है कि मेरा जेवीएम आवंटित ओएस से बहुत से हैंडल करता है और उन्हें वापस नहीं देता है, उदा। सॉकेट, खुली फाइलें, आदि। अगर मुझे पता चलेगा, तो मुझे पता चलेगा कि कहां देखना है और कब।
आप और अधिक प्रदान कर सकते हैं जेवीएम और ओएस के बारे में जानकारी? इसके अलावा, मेरा सुझाव है कि आप विकास वातावरण में इसे पुन: पेश करने में अधिक प्रयास करें। यह एक परेशानी हो सकती है, लेकिन जब आपको ऐसी समस्या हो, तो उत्पादन प्रणाली पर "निरीक्षण और रिपोर्ट" करने का प्रयास करने में अधिक समय लगेगा। – Timothy
यह लिनक्स पर बार-बार होता है जो वर्चुअलाइज्ड चलाता है और हमारे पास वास्तव में 2 सप्ताह भारी भारित परीक्षण चलाकर इसे पुन: पेश करने का विकल्प नहीं होता है। मैंने इसे विंडोज़ बक्से पर नहीं देखा है। आप सही हैं, इसे देव में पकड़ना सबसे अच्छा है, लेकिन मैं भी भविष्य में स्वयं निगरानी के लिए सर्वर में एम्बेडेड कुछ क्षमता रखना चाहता हूं। – Dima
अपने संपादन आरई। मुझे नहीं लगता कि जेवीएम आपको यह बताने में सक्षम है कि उसने कितनी फाइलें खोली हैं। सूर्य को जोड़ने के लिए यह एक अच्छी सुविधा हो सकती है, लेकिन तब तक आपको बताने के लिए बाहरी प्रक्रिया का उपयोग करना होगा। यदि आपको वास्तव में JVM के अंदर इसकी आवश्यकता है तो कुछ कोड लिखें जो lsof निष्पादित करता है और परिणाम देता है। अतिरिक्त रूप से खुली फ़ाइलों की सीमा को बदला जा सकता है। उदाहरण के लिए लिनक्स में आप /etc/security/limits.conf फ़ाइल को संशोधित कर सकते हैं। – bramp