दिलचस्प पोस्ट
हैश कोड () को ओवरराइड करने वाले ऑब्जेक्ट का अद्वितीय आईडी कैसे प्राप्त करें? एचटीएमएल + सीएसएस: नंबरों की सूची में सर्कल के अंदर नंबर MvvmCross Android – बटन कमांड के लिए रिलेटिव सोर्स बाइंडिंग के लिए वैकल्पिक एडीबी पुल के साथ एंड्रॉइड से चयनित फ़ाइलों की प्रतिलिपि कैसे करें जावा 8 फ़ंक्शनल प्रोग्रामिंग में 'कम' फ़ंक्शन के लिए तीसरा तर्क का उद्देश्य मक्रामन, सीपी 1252, लैटिन 1, यूटीएफ -8, और एएससीआईआई के बीच कूटबन्धन का मज़बूती से अनुमान कैसे करें जावा में डिफ़ॉल्ट एक्सेस स्पेसिफायर कौन सा है? Google मानचित्र v2 Android में मार्करों को स्थानांतरित करें स्वचालित रूप से एक परियोजना में प्रवेश लॉग्स / फ़ंक्शन लॉग को जोड़ना रूबी: मल्टीपार्ट / फ़ॉर्म-डेटा के रूप में HTTP द्वारा फ़ाइल कैसे पोस्ट करें? जीपीए का उपयोग करके मानचित्र <स्ट्रिंग, स्ट्रिंग> संग्रहीत करना Android में वीडियो छवि से फ़्रेम प्राप्त करना छोरों के साथ त्रिकोण बनाना Inno सेटअप: प्रतिलिपि फ़ोल्डर, सबफ़ोल्डर और फ़ाइलों को लगातार कोड अनुभाग में Jquery में वर्तमान तिथि कैसे प्राप्त करें?

जावा प्रक्रिया के आवासीय स्मृति उपयोग (आरएसएस) बढ़ते हुए

हमारे उत्पादन प्रणाली पर हमारे हाल के अवलोकन, हमें बताता है कि हमारे जावा कन्टेनर का निवासी मेमोरी उपयोग बढ़ता है। इस समस्या के संबंध में, हमने समझने के लिए कुछ जांच की है, क्यों जावा प्रक्रिया में हीप + थ्रेड स्टैक + साझा ऑब्जेक्ट + कोड कैश + आदि की तुलना में बहुत अधिक मेमोरी खपत होती है, जैसे कुछ देशी उपकरण जैसे pmap। इसके परिणामस्वरूप, हमें मूल प्रक्रिया (शायद malloc / mmap के साथ) द्वारा आवंटित कुछ 64 एम स्मृति ब्लॉकों (जोड़े) में पाया गया है:

0000000000400000 4K rx-- /usr/java/jdk1.7.0_17/bin/java 0000000000600000 4K rw--- /usr/java/jdk1.7.0_17/bin/java 0000000001d39000 4108K rw--- [ anon ] 0000000710000000 96000K rw--- [ anon ] 0000000715dc0000 39104K ----- [ anon ] 00000007183f0000 127040K rw--- [ anon ] 0000000720000000 3670016K rw--- [ anon ] 00007fe930000000 62876K rw--- [ anon ] 00007fe933d67000 2660K ----- [ anon ] 00007fe934000000 20232K rw--- [ anon ] 00007fe9353c2000 45304K ----- [ anon ] 00007fe938000000 65512K rw--- [ anon ] 00007fe93bffa000 24K ----- [ anon ] 00007fe940000000 65504K rw--- [ anon ] 00007fe943ff8000 32K ----- [ anon ] 00007fe948000000 61852K rw--- [ anon ] 00007fe94bc67000 3684K ----- [ anon ] 00007fe950000000 64428K rw--- [ anon ] 00007fe953eeb000 1108K ----- [ anon ] 00007fe958000000 42748K rw--- [ anon ] 00007fe95a9bf000 22788K ----- [ anon ] 00007fe960000000 8080K rw--- [ anon ] 00007fe9607e4000 57456K ----- [ anon ] 00007fe968000000 65536K rw--- [ anon ] 00007fe970000000 22388K rw--- [ anon ] 00007fe9715dd000 43148K ----- [ anon ] 00007fe978000000 60972K rw--- [ anon ] 00007fe97bb8b000 4564K ----- [ anon ] 00007fe980000000 65528K rw--- [ anon ] 00007fe983ffe000 8K ----- [ anon ] 00007fe988000000 14080K rw--- [ anon ] 00007fe988dc0000 51456K ----- [ anon ] 00007fe98c000000 12076K rw--- [ anon ] 00007fe98cbcb000 53460K ----- [ anon ] 

मैं 0000000720000000 3670016K के साथ लाइन की व्याख्या करता है, ढेर स्थान को संदर्भित करता है, जिसमें से हम जेएमएम पैरामीटर "-Xmx" का उपयोग करके परिभाषित करते हैं इसके ठीक बाद, जोड़े शुरू होती हैं, जिनमें से राशि 64 एम बिल्कुल ठीक है हम CentOS रिलीज 5.10 (अंतिम) 64-बिट आर्च और जेडीके 1.7.0_17 का उपयोग कर रहे हैं।

सवाल यह है कि ये ब्लॉकों क्या हैं? कौन सा सबसिस्टम इन आवंटन करता है?

अद्यतन: हम जेआईटी और / या जेएनआई देशी कोड आमंत्रण का उपयोग नहीं करते हैं।

Solutions Collecting From Web of "जावा प्रक्रिया के आवासीय स्मृति उपयोग (आरएसएस) बढ़ते हुए"

मैं एक समस्या मे फंस गया। यह glibc> = 2.10 के साथ एक ज्ञात समस्या है

इलाज इस env चर export MALLOC_ARENA_MAX=4 को सेट करना है export MALLOC_ARENA_MAX=4

MALLOC_ARENA_MAX को स्थापित करने के बारे में आईबीएम आलेख https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en

MALLOC_ARENA_MAX के लिए Google या इसके बहुत सारे संदर्भों को खोजने के लिए SO पर खोजें।

आवंटित स्मृति के कम विखंडन के लिए अनुकूलित करने के लिए आप अन्य मॉलोक विकल्पों को भी ट्यून करना चाहेंगे:

 # tune glibc memory allocation, optimize for low fragmentation # limit the number of arenas export MALLOC_ARENA_MAX=2 # disable dynamic mmap threshold, see M_MMAP_THRESHOLD in "man mallopt" export MALLOC_MMAP_THRESHOLD_=131072 export MALLOC_TRIM_THRESHOLD_=131072 export MALLOC_TOP_PAD_=131072 export MALLOC_MMAP_MAX_=65536 

यह भी संभव है कि मूल स्मृति रिसाव है। एक सामान्य समस्या एक ZipInputStream / GZIPInputStream ZipInputStream बंद नहीं होने के कारण मूल स्मृति लीक है

एक सामान्य तरीका है कि एक ZipInputStream है ZipInputStream लिए एक कॉल द्वारा है। Class.getResource / ClassLoader.getResource और कॉलिंग openConnection().getInputStream() java.net.URL पर या Class.getResourceAsStream को कॉल ClassLoader.getResourceAsStreamClass.getResourceAsStream / ClassLoader.getResourceAsStream एक यह सुनिश्चित करना चाहिए कि ये धाराएं हमेशा बंद हो जाएंगी

MALLOC_CONF परिवेश चर में सेटिंग्स निर्दिष्ट करके आप malloc नमूनाकरण प्रोफाइल को सक्षम करके मूल स्मृति लीक को डिबग करने के लिए jemalloc का उपयोग कर सकते हैं। इस ब्लॉग पोस्ट में विस्तृत निर्देश उपलब्ध हैं: http://www.evanjones.ca/java-native-leak-bug.html । इस ब्लॉग पोस्ट में जावा एप्लिकेशन में देशी मेमोरी रिसाव को डिबग करने के लिए jemalloc का उपयोग करने के बारे में भी जानकारी है।

उसी ब्लॉग में बाइटबफर से संबंधित अन्य मूल स्मृति रिसाव के बारे में जानकारी भी शामिल है