मेरे पास जावा वेब एप्लिकेशन टॉमकैट 7 पर चल रहा है जिसमें एक मेमोरी लीक दिखाई देती है। लोड के दौरान जब आवेदन के औसत स्मृति उपयोग रैखिक रूप से बढ़ता है (JConsole का उपयोग करके निर्धारित)। स्मृति उपयोग पठार तक पहुंचने के बाद, प्रदर्शन में काफी कमी आई है। प्रतिक्रिया समय ~ 100ms से [300ms, 2500ms] तक जाते हैं, इसलिए यह वास्तव में वास्तविक समस्याएं पैदा कर रहा है।जावा वेब एप्लिकेशन में मेमोरी लीक
अपने आवेदन की JConsole स्मृति प्रोफाइल:
VisualVM का उपयोग करना, मुझे लगता है कि कम से कम आधा स्मृति चरित्र सरणियों द्वारा किया जा रहा है (यानी चार []) और है कि ज्यादातर (मोटे तौर पर एक ही नंबर तारों में से प्रत्येक के 300,000 उदाहरण) में से एक हैं: "आवंटन विफलता", "प्रतिलिपि", "मामूली जीसी का अंत", जिनमें से सभी कचरा संग्रहण अधिसूचना से संबंधित प्रतीत होते हैं। जहां तक मुझे पता है, एप्लिकेशन कचरा कलेक्टर की निगरानी नहीं करता है। VisualVM को इनमें से किसी भी स्ट्रिंग के लिए जीसी रूट नहीं मिल रहा है, इसलिए मुझे इसे ट्रैक करने में कठिनाई हो रही है।
मेमोरी विश्लेषक हीप डंप:
मैं व्याख्या नहीं कर सकते क्यों कि जैसे स्मृति उपयोग पठारों, लेकिन मैं क्यों प्रदर्शन खराब हो एक बार यह होता है के रूप में एक सिद्धांत है। अगर स्मृति खंडित है, तो आवेदन को नए अनुरोधों को संभालने के लिए स्मृति के एक संगत ब्लॉक को आवंटित करने में काफी समय लग सकता है।
इसे अंतर्निहित टॉमकैट सर्वर स्थिति अनुप्रयोग की तुलना में, स्मृति बढ़ता है और स्तर बंद हो जाता है, लेकिन मेरे आवेदन की तरह उच्च "मंजिल" नहीं मारा जाता है। इसमें पहुंचने योग्य चार [] की उच्च संख्या भी नहीं है।
बिलाव सर्वर स्थिति आवेदन की JConsole स्मृति प्रोफाइल:
बिलाव सर्वर स्थिति applicationp की मेमोरी विश्लेषक हीप डंप:
जहां इन तार आवंटित और क्यों किया जा सकता है वे नहीं हैं कचरा इकट्ठा किया जा रहा है? क्या टोमकैट या जावा सेटिंग्स हैं जो इससे प्रभावित हो सकती हैं? क्या ऐसे विशिष्ट पैकेज हैं जो इस पर असर डाल सकते हैं?
आपने यह कैसे निर्धारित किया कि विशेष रूप से उन तारों को जीसीड नहीं किया जा रहा है? – djechlin
जब मेरा एप्लिकेशन निष्क्रिय है, तो मैं कचरा संग्रह को मजबूर करता हूं और VisualVM का उपयोग करके एक ढेर डंप लेता हूं। इन तारों की संख्या हमेशा समय के साथ बढ़ जाती है और हमेशा कम से कम आधे उपयोग की गई स्मृति के लिए खाते हैं। –
मेमोरी विश्लेषक इंगित करता है कि पहुंचने योग्य char [] और स्ट्रिंग ऑब्जेक्ट्स 210 एमबी ढेर के 176 एमबी के लिए खाते हैं। –