2009-09-25 15 views
23

मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरी मेमोरी लिनक्स में चल रही जावा प्रक्रिया के लिए कहां गई है। किसी ने सुझाव दिया कि मैं वास्तव में यह देखने के लिए pmap -x का उपयोग करता हूं कि स्मृति क्या कर रही है।एक रिसाव का पता लगाने की कोशिश कर रहा है! Pmon के लिए Anon मतलब क्या है?

उत्पादन बहुत लंबा है लेकिन मूल रूप से इसके बारे में एक बड़ा भाग इस की पुनरावृत्ति है:

00007fbf75f6a000 1016  -  -  - rwx-- [ anon ] 
00007fbf76068000  12  -  -  - ----- [ anon ] 

वास्तव में क्या यह मतलब है? मेरे पास इस (4000+) की इतनी सारी प्रविष्टियां क्यों हैं?

उत्तर

28

Anon ब्लॉक "बड़ी" malloc या mmap के माध्यम से आवंटित ब्लॉक कर रहे हैं - manpages देखते हैं। इस प्रकार, उनके पास जावा ढेर के साथ कुछ लेना देना नहीं है (इस तथ्य के अलावा कि पूरे ढेर को इस तरह के ब्लॉक में संग्रहीत किया जाना चाहिए)।

मेरे अनुभव में, धागे के ढेर भी एनन ब्लॉक का उपयोग करते हैं। यदि आप बहुत सारे एनन ब्लॉक देखते हैं जिनमें सभी का आकार समान होता है, और वह आकार 512k से 4 एमबी है (नीचे दिए गए उदाहरण को टॉमकैट प्रक्रिया के लिए एक दर्जन बार दोहराया गया है), तो यह संभव कारण है। कार्यक्रम के आधार पर, इनमें से कुछ दर्जन तक हो सकते हैं; यदि आप हजारों को देख रहे हैं, तो इसका मतलब है कि आपको थ्रेडिंग में कोई समस्या है। तुम क्यों pmap उपयोग कर रहे हैं एक जावा स्मृति समस्या का निदान करने:

b089f000 504K rwx-- [ anon ] 
b091d000  12K ----- [ anon ] 
b0920000 504K rwx-- [ anon ] 
b099e000  12K ----- [ anon ] 
b09a1000 504K rwx-- [ anon ] 
b0a1f000  12K ----- [ anon ] 

लेकिन यह एक सवाल छोड़?

+0

> जावा मेमोरी समस्या का निदान करने के लिए आप pmap का उपयोग क्यों कर रहे हैं? हमारे पास अधिकतम 256 एमबी सेट के साथ एक जावा प्रक्रिया है लेकिन यह आरएसएस मेमोरी 8.9 जीबी है। इसका निदान करने के लिए हम किस अन्य उपकरण का उपयोग कर सकते हैं? – Opher

+1

@Opher - निश्चित रूप से, आपके लिए समझ में आता है। लेकिन क्या आप ओपी हैं? (और यदि हां, तो आप 8 साल बाद क्यों टिप्पणी कर रहे हैं?)। मूल प्रश्न से, यह स्पष्ट नहीं था कि क्या ओपी जानता था कि वह क्या ढूंढ रहा था। – kdgregory

+1

और एक सुझाव के रूप में: यदि आप कॉन्फ़िगर किए गए ढेर आकार और आरएसएस के बीच ऐसी असमानता देख रहे हैं, तो स्मृति-मैप की गई फ़ाइलों या प्रत्यक्ष बफर की तलाश करें। आपको ऐसा व्यवहार दिखाई देगा, उदाहरण के लिए, एक काफ्का या एसओएलआर सर्वर से, और यह सामान्य है। – kdgregory

3

this partthis part अज्ञात स्मृति के लिए सिस्टम प्रदर्शन ट्यूनिंग के देखें।

+0

यह आपको बताता है कि अज्ञात आवंटन कैसे प्रबंधित किए जाते हैं, न कि यह क्या है। हालांकि कुल मिलाकर लिंक काफी अच्छा है। – kdgregory

2

उपयोग ग्रहण मेट (जब आप जावा ढेर नहीं देशी ढेर में OutOfMemoryExceptions मिल)।

0

मैंने धागा रिसाव में पहले उस पैटर्न को देखा है। यदि आपके पास कोड है जो धागे को पूल करने का प्रयास कर रहा है, लेकिन किसी भी तरह से गड़बड़ हो जाता है और धागे को रिसाव करता है, तो आपको उस तरह के पैटर्न को pmap में मिलता है।

मुझे लगता है कि स्मृति के प्रत्येक बिट थ्रेड के लिए कम से कम ढेर आकार है, निश्चित रूप से यह हमारे मामले में ढेर के साथ कोई संबंध नहीं था।
हम अभी भी आउटऑफमेमरी एरर प्राप्त करते हैं जब हमने ओएस सीमाओं को मारा, तब भी जब हम ढेर को समझते हैं तो यह कुल मिलाकर नहीं होता है।

जब हम इस pmap [pid] | grep -c 12K की तरह एक समस्या थी निकला उपयोग में धागे की संख्या होने के लिए।