2009-09-27 12 views
5

मुझे सर्वर अनुप्रयोग में किए गए किसी मेमोरी एक्सेस उल्लंघन का पता लगाने के लिए वालग्रिंड का उपयोग करने की आवश्यकता है। सर्वर कई धागे बनाता है। मुझे संदेह है कि एक रेसिंग स्थिति है जो सर्वर को हर 1 घंटे या तो दुर्घटनाग्रस्त होने का कारण बनती है। हमने अपने स्मृति उपयोग का विश्लेषण करने के लिए वालग्रिंड का उपयोग किया लेकिन सर्वर प्रक्रिया की गति नाटकीय रूप से कम हो गई। सर्वर की गति इतनी कम हो गई कि यह शायद ही प्रयोग योग्य था और जहां कोई संभावित रेसिंग स्थितियां थीं।हमारी प्रक्रिया के साथ समानांतर में वालग्रिंड कैसे चलाएं ताकि इसका प्रदर्शन बहुत कम न हो?

वहाँ वैसे भी हमारे आवेदन तो हम इतना प्रदर्शन खोना नहीं है के साथ समानांतर में वेलग्रिंड चलाने के लिए है?

उत्तर

5

यह ध्यान देने योग्य है कि वेलग्रिंड, जबकि मल्टी-थ्रेडेड कार्यक्रमों का समर्थन करते हुए वास्तव में कार्यक्रम के थ्रेड के समानांतर में नहीं चलेगा यदि आप multiiple कोर उपलब्ध लायक है। यह देशी ओएस शेड्यूलर की तुलना में एक बेहतर अनाज पर धागे को भी interleaves। संयुक्त इन 2 तथ्यों से यह दौड़ की स्थिति या अन्य समवर्ती विसंगतियों के साथ एक कार्यक्रम हो सकता है जो अलग-अलग व्यवहार करेगा।

आप Helgrind को आजमा सकते हैं, मुख्य रूप से सही लॉकिंग अनुशासन और drd का पता लगाने के उद्देश्य से एक उपकरण, मुख्य रूप से डेटा दौड़ का पता लगाने के उद्देश्य से एक उपकरण।

1

यह सीधे अपने सवाल का जवाब नहीं है, लेकिन यदि आप एक समन्वयन त्रुटि संदेह है, तो आप वेलग्रिंड उपकरण Helgrind उपयोग करने की कोशिश की है?

+0

मैं के रूप में इससे पहले कि मैं एक पेशेवर वेलग्रिंड उपयोगकर्ता नहीं हूँ Helgrind के बारे में पता नहीं था। मैंने आज इसके बारे में अभी सीखा है। मुझे संदेह है कि एक वस्तु हटा दी जा रही है लेकिन एक और धागा इसे एक्सेस करने का प्रयास कर रहा है और यह प्रक्रिया को दुर्घटनाग्रस्त कर देता है। यह बहुत संभव है क्योंकि एप्लिकेशन को बहुत खराब तरीके से कोड किया गया है। मैं हेल्ग्रिंड आज़माउंगा और देख सकता हूं कि यह क्या पेशकश कर सकता है। –

9

आप ऐसा नहीं कर सकते हैं। Valgrind वास्तव में आपके कोड को मूल रूप से निष्पादित नहीं करता है - इसके बजाय यह इसे सिम्युलेटर के अंदर चलाता है। यही कारण है कि यह बहुत धीमी है। तो, इसे तेजी से चलाने के लिए कोई रास्ता नहीं है, और अभी भी वालग्रिंड का लाभ प्राप्त करें।

आपका सबसे अच्छा शर्त ulimit ताकि आपके कार्यक्रम एक कोर फ़ाइल जब यह दुर्घटनाओं उत्पन्न करता है स्थापित करने के लिए है। फिर आप कोर की जांच करके समस्या का समाधान करने की कोशिश कर सकते हैं।

+1

+1, मैं लगभग समान जवाब देने वाला था। –

0

वेलग्रिंड अपने malloc कॉल में hooking द्वारा काम करता है, तो आप अपने कार्यक्रम के तहत valgrind धीमी चलाने के लिए उम्मीद कर सकते हैं। तो, मैं कहूंगा कि आप अपने प्रोग्राम को वाल्ग्रिंड और के तहत तेजी से चलाने के लिए स्मृति त्रुटियों का विश्लेषण करने का लाभ प्राप्त नहीं कर पाएंगे।

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