2012-02-09 10 views
12

मैं अपने जावा मूल कोड में मेमोरी लीक खोजने के लिए Valgrind 3.7.0 का उपयोग करना चाहता हूं। मैं jdk1.6.0._29 का उपयोग कर रहा हूँ।वालग्रिंड और जावा

ऐसा करने के लिए, मुझे --trace-children = yes flag सेट करना होगा। कि झंडा स्थापना, मैं अब valgrind किसी भी जावा आवेदन पर भी एक आदेश की तरह चला सकते हैं,:

Error occurred during initialization of VM 
    Unknown x64 processor: SSE2 not supported 

मैं इस लिंक को देखा है:

valgrind --trace-children=yes --smc-check=all java -version 

त्रुटि संदेश प्राप्त होगा https://bugs.kde.org/show_bug.cgi?id=249943, लेकिन यह उपयोगी नहीं था।

वालग्रिंड के बिना प्रोग्राम चला रहा है या बिना छेड़छाड़ के बच्चों के ध्वज ठीक है।

क्या किसी के पास कोई विचार है कि मैं क्या कर सकता हूं?

उत्तर

8

वेलग्रिंड जाल और (एक हद तक) प्रोसेसर की बराबरी, इस प्रतीत होता है JVM SSE के लिए अपने समर्थन के बारे में उलझन प्राप्त करने के लिए पैदा कर रहा है और

के प्रति सहिष्णु रहा SSE के साथ परेशान करने के लिए नहीं कह रहा JVM अपनी कोशिश सुझाव है कि है , आप इसे JVM ध्वज -XX:UseSSE=0

शुभकामनाएं के साथ हॉटस्पॉट के लिए बंद करने में सक्षम होना चाहिए! JVM को valgrinding थोड़ा मुश्किल है क्योंकि वे एक-दूसरे के लिए कुछ हद तक शत्रु हैं

यह भी आपके संस्करण का संस्करण हो सकता है और जावा मैंने स्थानीय रूप से ऊपर से अपना आदेश चलाया और valgrind 3.6.1 और जावा 1.6 दोनों का उपयोग करके कोई समस्या नहीं थी .0_26 और जावा 1.7.0-b147

12

तुम इतनी तरह, valgrind तहत JVM चलाने के लिए JIT अक्षम करना होगा:

valgrind java -Djava.compiler=NONE ... 

इसके अलावा, आप उत्पन्न छिपाता (और आप सबसे अधिक संभावना इच्छा का उपयोग कर खत्म करता है, तो!), जनरेटेड दमन में कॉल स्टैक की गहराई के साथ कोई समस्या हो सकती है, जो JVM के अंतर्गत चलने पर होने की संभावना अधिक होती है।

वाल्ग्रिंड के हाल के संस्करणों में, जेनरेट किए गए दमन में वाल्ग्रिंड/मेमचेक द्वारा संसाधित किए जा सकने वाले गहरे कॉल स्टैक हो सकते हैं। इस समस्या का लक्षण यह है कि वाल्ग्रिंड संदेश के साथ अप्रत्याशित रूप से समाप्त होता है "स्टैक ट्रेस में बहुत से कॉलर"।

यह समस्या आसानी से तय हो गई है: valgrind बनाने से पहले, फ़ाइल coregrind/m_errormgr.c संपादित करें और एक बड़ा मूल्य को #define में हार्ड-कोडेड मूल्य बदल (मैं 99 का उपयोग करें):

/* मैक्स एक दमन में संदर्भ के लिए कॉलर्स की संख्या। */

#define VG_MAX_SUPP_CALLERS 99 

फिर दस्तावेज़ों के अनुसार वाल्ग्रिंड बनाएं और इंस्टॉल करें।

+1

नवीनतम Valgrind कॉलर्स सीमा 500 पर सेट है। –

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