2009-01-16 5 views
5

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

मैं या तो एक दमन फ़ाइल, या एक वीएम रनटाइम मोड खोजना चाहता हूं, जो गेहूं को इस स्थिति में चोटी से अलग करने के लिए नकली स्मृति त्रुटियों को हटा देगा। कोई सुझाव?

+0

मुझे Win32 पर जेएनआई मेमोरी समस्याओं को ट्रैक करना आसान नहीं था। –

+0

यदि आप बहिष्करण फ़ाइल बनाते हैं, तो क्या आप इसे यहां पोस्ट करना चाहते हैं? – Arkadiy

उत्तर

1

जावा एप्लिकेशन के बाहर इस देशी कोड को प्रोफाइल करने के बारे में क्या? आम तौर पर जेएनआई कोड कुछ लाइब्रेरी के चारों ओर एक रैपर होता है जो जावा विशिष्ट नहीं है। सुनिश्चित नहीं है कि यह आपके विशिष्ट मामले के लिए सही है, लेकिन यदि ऐसा है तो शायद उस पुस्तकालय के आसपास एक सादा सी या सी ++ परीक्षण ढांचे लिखकर स्मृति समस्याओं को अलग किया जा सकता है?

यदि आपका ढांचा सी ++ में है तो आप अपने स्वयं के नए आपूर्ति और ऑपरेटरों को हटा सकते हैं और स्मृति उपयोग को ट्रैक कर सकते हैं। आपको आंकड़े एकत्र करना होगा और उन्हें कुछ स्क्रिप्ट के साथ संसाधित करना होगा लेकिन यह अच्छी तरह से काम कर सकता है।

1

मैं आपके पोस्ट किए गए प्रश्न का उत्तर नहीं दे सकता, लेकिन क्या आप बता सकते हैं कि आप किस समस्या का सामना कर रहे हैं?

दूसरे शब्दों में, आप हमें बता सकते हैं कि यह है ...

  • JNI परत में और नहीं एक JVM वस्तु गुंजाइश मुद्दा?
  • फ्रीड मेमोरी का उपयोग?
  • एक बफर अंडरराइट/ओवरराइट?
  • अन्य स्मृति भ्रष्टाचार?

मुझे हाल ही में जावा/सी को डीबग करना पड़ा था जिसमें समस्याएं थीं (30+ मिनट के बाद इसे चलाने में), जो यह निकला था, इसे मुक्त करने के बाद स्मृति का उपयोग कर रहा था। मैंने dmalloc का उपयोग करने की कोशिश की, मेरी एक कस्टम मेमोरी लीक लाइब्रेरी, वालग्रिंड और कोई भी मेरी जरूरत के अनुसार काम नहीं किया।

आखिरकार मैंने मुफ्त, मॉलोक, कॉलोक, रीयलोक के चारों ओर रैपर का एक साधारण सेट बनाया जो बस फ़ाइल में स्मृति पते और आकार मुद्रित करता था। इसे निरस्त करने के बाद (जीडीबी के भीतर) मैं समय पर बैकट्रैक कर सकता था और पता लगा सकता था कि स्मृति कब खाली हो गई थी और जहां संदर्भ हटा दिए गए थे।

यदि आपकी समस्या सी/सी ++ में है और आप एक डीबगर में त्रुटि को जाल कर सकते हैं जो आपके लिए काम कर सकता है। हां, यह थकाऊ है, लेकिन शायद वालग्रिंड आउटपुट के मेगाबाइट्स के माध्यम से बहने से भी बदतर नहीं है।

आशा है कि & अच्छी किस्मत में मदद करता है।

+0

मैं लीक को सक्रिय रूप से पहचानने के लिए देख रहा हूं, मुझे पता नहीं है कि मुझे पता है कि वह मौजूद है। मैं आपकी स्थिति से बचने के लिए, वास्तव में :) यह मेरे लिए जारी करने से पहले मेरे ऐप्स को valgrind के माध्यम से चलाने के लिए एक आदत है। हालांकि, जेएनआई पुस्तकालय उसमें से एक हैश बनाता है। –

0

जबकि वाल्ग्रिंड के रूप में स्पिफी नहीं है (जो मैंने पढ़ा है उसके आधार पर), आप jmap और jhat को आजमा सकते हैं। ये टूल आपको चल रही प्रक्रिया का एक स्नैपशॉट लेने और देखने के लिए क्या चल रहा है। मैंने सरल तकनीक रिसाव के लिए इस तकनीक का उपयोग किया है और यह अच्छी तरह से काम किया है। हालांकि, अगर स्मृति समस्याओं गैर-जेवीएम आवंटन के कारण होती है, तो इससे मदद नहीं मिलेगी।

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

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