2016-09-21 5 views
10

है मैं एक अजीब स्मृति रिसाव का निवारण करें। यह जावा 8 के लिए विशिष्ट है, 7u79 पर नहीं हो रहा है।जावा स्मृति रिसाव - jmap वर्गों प्रदर्शित नहीं करता है लेकिन jstat

मैं जावा कोड के लिए पहुँच नहीं है। मैं ठीक से पता है जो उपयोगकर्ता की कार्यवाही एक रिसाव का कारण बनता है, मुझे पता है रिसाव वर्गों (नहीं ढेर) और हमलावर वर्गों के साथ का पता आसानी से कर रहे हैं के बारे में है + TraceClassLoading + TraceClassUnloading:

[Loaded com.mastercard.mcwallet.sdk.xml.allservices.ShoppingCartRequest$JaxbAccessorF_oAuthToken from __JVM_DefineClass__] 
[Loaded com.mastercard.mcwallet.sdk.... thousand similar classes per one user action... ] 

इन कक्षाओं को बढ़ाने के लिए लग रहे हैं jstat -class द्वारा वर्ग काउंटर उत्पादन:

Loaded Bytes Unloaded Bytes  Time 
14045 26138.8  0  0.0  110.00 << buggy user action 
14675 26754.6  0  0.0  110.05 
15300 27364.9  0  0.0  110.10 
15304 27370.9  0  0.0  110.11 
15304 27370.9  0  0.0  110.11 
15304 27370.9  0  0.0  110.11 
15306 27374.0  0  0.0  110.11 
15306 27374.0  0  0.0  110.11 
15306 27374.0  0  0.0  110.11 
15306 27374.0  0  0.0  110.11 << buggy user action 
15930 27982.2  0  0.0  110.18 
16553 28589.3  0  0.0  110.23 
16553 28589.3  0  0.0  110.23 

बात यह है कि इन कक्षाओं में कभी नहीं कचरा-एकत्र metaspace से, कभी नहीं [Unloaded] हैं और वे jmap -clstats में दिखाई नहीं देते है।

class_loader classes bytes parent_loader alive? type 

<bootstrap>  2574 4493256 null   live <internal> 
0x0000000087d016d0  1  1471 0x000000008237f088  dead sun/reflect/[email protected] 
... some lines omitted ... 
0x000000008237f088  6505 12228227  0x0000000080383938  dead org/apache/catalina/loader/[email protected] 
... some lines omitted ... 
total = 600  14002 25351427   N/A   alive=1, dead=599   N/A 

मैं प्रोग्रामर से गुजर सकता है कोई सुझाव लाता है इस अंगूठी किसी भी घंटी है या: आदेश रिपोर्ट कक्षाओं की संख्या में कमी, संख्या में वृद्धि नहीं करता है, वहाँ कोई संदिग्ध वर्ग लोडर कर रहे हैं? वे कहते हैं कि वे रिसाव का पता लगाने में असमर्थ हैं। क्या मैं सिर्फ जेवीएम विकल्पों के साथ झुकाव करके इस रिसाव को रोक सकता हूं?

+0

केवल 'MetaSpace' साथ समस्या यह है? 'ढेर' के बारे में क्या? और क्या आप 'जावा' प्रक्रिया मेमोरी उपयोग आंकड़े भी प्रदान कर सकते हैं? –

+0

केवल मेटास्पेस, ढेर स्थिर है और पूर्ण नहीं है। वास्तव में क्या आंकड़े? – kubanczyk

+0

मेरा मतलब है कि जावा प्रक्रिया मेमोरी उपयोग कितनी तेजी से बढ़ता है? –

उत्तर

2

मुझे लगता है JAXB अपनी स्मृति है, जो कचरा जा रहा एकत्र नहीं कर रहे हैं में कक्षाएं लोड कर रहा है। कक्षाएं अनलोड नहीं होने पर मेटास्पेस खाली नहीं होगा।

JaxB memory issue for Java 8 की जांच करें। मुझे लगता है कि आप निर्भरता API वर्शन को स्वैप करके या एक अतिरिक्त पैरामीटर पर टॉगल करके इस अपवाद से छुटकारा पाने के कर सकते हैं:

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true 
6

तो गाड़ी कक्षाएं तो उतारने यह आवेदन में कहीं कैश्ड किया जाना चाहिए, और के रूप में के लिए उपलब्ध नहीं मैं समझता हूँ कि अपने लक्ष्य कहाँ है खोजने के लिए और डेवलपर्स के लिए इस जानकारी प्रदान करना है।

आप अपने ढेर डंप का निरीक्षण करने के लिए एक्लिप्स मेमोरी विश्लेषक (MAT) का उपयोग करने का प्रयास कर सकते हैं, और यह समस्या क्षेत्रों, कक्षाओं और उदाहरणों को दिखा सकता है जिनमें बग्गी कक्षाओं के लिंक हैं।

संबंधित मुद्दे