दिलचस्प पोस्ट
विनफॉर्म्स डबल बफ़रिंग उद्देश्य सी: प्रगति पट्टी के साथ फ़ाइल डाउनलोड करना ओपनसीवी टेम्पलेट मिलान और पारदर्शिता एक पंक्ति में एक बार में एक वर्ण कैसे मुद्रित करें? उपयोगकर्ता को पासवर्ड बचाने के लिए कैसे संकेत मिलता है? जावा में org.json.JSONObject के साथ रिक्त करने के लिए आप एक मान कैसे सेट करते हैं? ASP.NET MVC में डिफ़ॉल्ट JSON सीरियललाइज़र सेट करना एएसपीएनईटी सत्र राज्य प्रदर्शन के लिए एसक्यूएलएसर्वर बनाम स्टेटसर्वर पायथन में संस्करण स्ट्रिंग की तुलना करें JSON को PHP ऑब्जेक्ट को सीरियल करना जावा io बदसूरत कोशिश-अंत में ब्लॉक जावा स्ट्रिंग स्कैनर इनपुट सूचना के लिए इंतजार नहीं करता है, सीधे अगले बयान पर चलता है। जानकारी के लिए इंतजार कैसे करें? डेटाबेस से सीएसवी फ़ाइल को निर्यात करें जावास्क्रिप्ट श्रोता, "कुंजीपटल" बैकस्पेस का पता नहीं लगाता है? phantomjs "SyntaxError: पार्स त्रुटि" संदेश से अधिक जानकारी प्राप्त करना

टोमकैट में आवेदन को पुन: नियोजित करते समय मेमोरी रिसाव

जब मैं अपने आवेदन को टॉमकेट में पुनर्व्यवस्थित करता हूं, तो मुझे निम्नलिखित समस्या मिलती है:

The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@10d16b]) and a value of type [com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty] (value [com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty@1a183d2]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. 

इसके अलावा, मेरे आवेदन में एहकास का उपयोग कर रहा हूं। यह भी निम्नलिखित अपवाद का परिणाम लगता है

  SEVERE: The web application [] created a ThreadLocal with key of type [null] (value [com.sun.xml.bind.v2.ClassFactory$1@24cdc7]) and a value of type [java .util.WeakHashMap... 

एहकैच एक कमजोर हैश नक्शा बनाने लगता है और मुझे संदेश मिलता है कि यह बहुत मेमोरी रिसाव पैदा करने की संभावना है।

मैंने नेट पर खोज की और यह पाया, http://jira.pentaho.com/browse/PRD-3616 लेकिन मेरे पास सर्वर तक पहुंच नहीं है जैसे कि यह।

कृपया मुझे बताएं कि क्या इन चेतावनियों का कोई प्रभावकारी प्रभाव है या क्या उन्हें अनदेखा किया जा सकता है? मैंने टॉमकेट मैनेजर में "मेमोरी लीक खोजें" विकल्प का प्रयोग किया है और यह कहता है "कोई स्मृति लीक नहीं मिली"

Solutions Collecting From Web of "टोमकैट में आवेदन को पुन: नियोजित करते समय मेमोरी रिसाव"

जब आप अपने आवेदन का पुनर्व्यवस्था करते हैं, तोमकैट एक नया वर्ग लोडर बनाता है। पुराने क्लास लोडर को कचरा एकत्र किया जाना चाहिए, अन्यथा आपको एक ट्रांसजेन मेमोरी रिसाव मिलेगा।

टॉमकेट यह नहीं देख सकता है कि कचरा संग्रह काम करेगा या नहीं, लेकिन असफलताओं के कई सामान्य बिंदुओं के बारे में यह जानकारी है। यदि वेबएप वर्ग लोडर एक ThreadLocal सेट करता है तो एक उदाहरण जिसका वर्ग वेबएप वर्ग लोडर द्वारा स्वयं लोड किया गया था, सर्विसलेट थ्रेड उस उदाहरण के संदर्भ को रखता है। इसका मतलब यह है कि क्लास लोडर कचरा एकत्रित नहीं होगा।

टोमेट ऐसे कई detections करता है, यहाँ अधिक जानकारी के लिए देखें । धागे स्थानीय लोगों को साफ करना मुश्किल है, आपको प्रत्येक थ्रेड में ThreadLocal पर remove() को कॉल करना होगा जो उस तक पहुँचा था। व्यवहार में यह केवल आपके वेब ऐप को कई बार पुनर्व्यवस्था के दौरान विकास के दौरान महत्वपूर्ण है। उत्पादन में, आप शायद पुनर्व्यवस्था नहीं करते हैं, इसलिए इसे अनदेखा किया जा सकता है।

धागे स्थानीय लोगों को कौन सा उदाहरण बताता है, वास्तव में पता करने के लिए, आपको एक प्रोफाइलर का उपयोग करना होगा उदाहरण के लिए जेपीरोफ़ाइलर में ढेर वॉकर (अस्वीकरण: मेरी कंपनी जेपीरोफाइल विकसित करती है) आपको उन धागे स्थानीय लोगों को ढूंढने में मदद मिलेगी। रिपोर्ट मूल्य वर्ग (com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty या com.sun.xml.bind.v2.ClassFactory) का चयन करें और cumulated आने वाले संदर्भ दिखाएं। इनमें से एक एक java.lang.ThreadLocal$ThreadLocalMap$Entry । आने वाले संदर्भ प्रकार के लिए संदर्भित ऑब्जेक्ट का चयन करें और आवंटन दृश्य पर स्विच करें। आप देखेंगे कि उदाहरण कहाँ आवंटित किया गया है। उस जानकारी के साथ आप यह तय कर सकते हैं कि आप इसके बारे में कुछ कर सकते हैं या नहीं।

यहां छवि विवरण दर्ज करें

मैटियास जुडरमैन के पास एक उत्कृष्ट 6-लेख का आलेख है जो क्लासलोडर लीक के बारे में सिद्धांत और व्यवहार को बहुत स्पष्ट रूप से बताता है। इससे भी बेहतर, उसने एक जार फ़ाइल भी जारी की जिसे हम अपनी युद्ध फ़ाइलों में शामिल कर सकते हैं। मैंने इसे अपने वेब एप्लिकेशन पर देखा, और जार फ़ाइल एक जादू की तरह काम करती है! जार फ़ाइल को classloader-leak-prevention.jar कहा जाता है। इसका उपयोग करने के लिए यह हमारे वेब .xml को जोड़ने के लिए उतना सरल है

 <listener> <listener-class>se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventor</listener-class> </listener> 

और फिर इसे हमारे pom.xml में जोड़ना

 <dependency> <groupId>se.jiderhamn</groupId> <artifactId>classloader-leak-prevention</artifactId> <version>1.15.2</version> </dependency> 

अधिक जानकारी के लिए, कृपया अपने लेख के गिटहब या भाग 6 पर होस्ट किए गए प्रोजेक्ट होम पेज देखें

उन्हें सही ढंग से सफाई के बिना थ्रेड्स बनाना अंततः आपको स्मृति से बाहर चला जाएगा – वहां गया, ऐसा किया

जो लोग अभी भी त्वरित समाधान / समाधान के लिए सोच रहे हैं, वे नीचे जा सकते हैं:

  • यदि स्टैंडअलोन टॉमकेट चल रहा है, तो मारो javaw.exe या इसे असर वाली प्रक्रिया।
  • यदि ग्रहण से चल रहा है, तो एक्लिप्स्। एक्सई और जावा। एक्सई को मारना या प्रक्रिया बंद करना।
  • अभी भी हल नहीं किया गया, कार्य प्रबंधक के लिए जांचें, यह संभावना है कि जिस प्रक्रिया का कारण हो रहा है वह उच्चतम मेमोरी उपयोग के साथ दिखाया जाएगा – अपने विश्लेषण करें और उसे मार डालें

आपको सामग्रियों के पुनर्निर्यात और स्मृति समस्याओं के बिना आगे बढ़ना अच्छा होना चाहिए।

मुझे लगता है कि आप शायद यह देख चुके हैं लेकिन सिर्फ मामले में एहकैशे डॉक्टर बिंब को बिगड़ने की सलाह देता है, न कि WEB-INF / lib में: http://ehcache.org/documentation/integrations/tomcat

मैं थ्रेड स्थानीय लोगों को आरंभ करने की सलाह देता हूं, एक ServletRequestListener में ।

ServletRequestListener के 2 तरीके हैं: एक प्रारंभिक और विनाश के लिए एक।

इस तरह, आप अपने ThreadLocal को साफ कर सकते हैं। उदाहरण:

 public class ContextInitiator implements ServletRequestListener { @Override public void requestInitialized(ServletRequestEvent sre) { context = new ThreadLocal<ContextThreadLocal>() { @Override protected ContextThreadLocal initialValue() { ContextThreadLocal context = new ContextThreadLocal(); return context; } }; context.get().setRequest(sre.getServletRequest()); } @Override public void requestDestroyed(ServletRequestEvent sre) { context.remove(); } } 

web.xml :

 <listener> <listener-class>ContextInitiator</listener-class> </listener>