c++ - Tracing memory corruption on a production linux server -


दोस्तों, क्या आप मेमोरी भ्रष्टाचार को सी ++ के साथ निर्मित उत्पादन मल्टीथ्रेडेड सर्वर पर लिनक्स एक्स 86_64 ? मैं वर्तमान में निम्नलिखित समस्या का सामना कर रहा हूं: मेरे सफ़र सेगमेंट के दौरान कई घंटों तक मेरा सर्वर दुर्घटनाग्रस्त हो जाता है और मुख्य डंप से पता चलता है कि त्रुटि malloc / calloc में होती है जो कि निश्चित रूप से स्मृति को दूषित होने का एक संकेत है।

असल में मैं पहले से ही बहुत कुछ किस्मत के बिना कुछ उपकरणों की कोशिश की है ये मेरा अनुभव अब तक है:

  • वालग्रिंड एक महान (मैं भी सबसे अच्छा कहना चाहता हूं) उपकरण है, लेकिन यह सर्वर को बहुत धीमा बनाता है जिससे यह उत्पादन में अनुपयोगी हो। मैंने एक मंच सर्वर पर कोशिश की और यह वास्तव में मुझे कुछ स्मृति संबंधित मुद्दों को खोजने में मदद की, लेकिन उन्हें फिक्स करने के बाद भी मैं अब भी उत्पादन सर्वर पर क्रैश करता हूं मैंने अपने स्टेज सर्वर को वालग्रिंड के तहत कई घंटों तक भाग लिया लेकिन फिर भी कोई गंभीर त्रुटियों को नहीं खोजा जा सका।

  • इलेक्ट्रिकफेंस को एक असली मेमोरी हॉग माना जाता है, लेकिन मैं इसे ठीक से काम नहीं कर सका। यह यादृच्छिक अजीब जगहों पर मंच सर्वर पर लगभग तुरंत segfaults जहां Valgrind किसी भी मुद्दे पर बिल्कुल नहीं दिखाया। शायद इलेक्ट्रिकफेंस थ्रेडिंग का समर्थन नहीं करता है? .. मुझे कोई अंदाज़ा नहीं है।

  • ड्यूमा - इलेक्ट्रिकफेंस जैसी ही कहानी लेकिन इससे भी बदतर। जबकि ईएफ ने पढ़ा जाने योग्य बैक्रासेस ड्यूमा के साथ कोर डंप का उत्पादन किया था, केवल मुझे "???" (और हाँ सर्वर को सुनिश्चित करने के लिए -g फ्लैग के साथ बनाया गया है) दिखाता है

  • dmalloc - मैंने कॉन्फ़िगर किया सर्वर इसे मानक मॉलोक रूटीन के बजाय उपयोग करने के लिए, हालांकि यह कई मिनट के बाद लटका हुआ है। प्रक्रिया में जीडीबी संलग्न करने से पता चलता है कि इसे डीएमएलएलक में कहीं नज़र रखता है: (

मैं धीरे-धीरे पागल हो रहा हूं और मुझे नहीं पता कि आगे क्या करना है। मेरे पास निम्न है कोशिश करने के लिए उपकरण: mtrace, mpatrol लेकिन शायद किसी के पास एक बेहतर विचार है?

मैं इस मुद्दे पर किसी भी मदद की सराहना करता हूं।

अपडेट: मैं बग के स्रोत को खोजने में कामयाब रहा था। हालांकि मैं इसे मंच सर्वर पर उत्पादन नहीं पाया, जो कि हेल्ग्रिंड / डीआरडी / एसएएन का उपयोग नहीं हुआ - कई थ्रेडों के बीच एक द्वार था, जिसके कारण स्मृति भ्रष्टाचार हुआ। चाबी के बाद से उचित वाल्ग्रिम दमन का उपयोग करना था इन उपकरणों ने बहुत से झूठे सकारात्मक दिखाए हैं। फिर भी मैं वास्तव में नहीं जानता कि उत्पादन सर्वर पर किसी भी महत्वपूर्ण मंदी के बिना कैसे पता चला ...

हाँ, सी / सी ++ स्मृति भ्रष्टाचार समस्याएं कठिन हैं। मैंने कई बार वाल्ग्रिंड का इस्तेमाल किया है, कभी-कभी यह समस्या का पता चला है और कभी-कभी नहीं।

जबकि valgrind की जांच Tput इसके परिणाम बहुत तेजी से नजरअंदाज करते हैं। कभी-कभी काफी समय बिताए जाने के बाद, आप देखेंगे कि वाल्ग्रिंड ने आपको पहली जगह पर सुराग दिया था, लेकिन आप इसे नजरअंदाज कर दिया।

एक और सलाह है कि पहले से ज्ञात स्थिर रिलीज से कोड परिवर्तन की तुलना करना। यह एक समस्या नहीं है यदि आप किसी प्रकार की स्रोत संस्करण प्रणाली (उदा। Svn) का उपयोग करते हैं सभी मेमोरी संबंधी कार्यों का परीक्षण करें (उदा। मेम्क्पी, मेमेसेट, स्प्रिंटफ़, नया, हटाएं / हटाना [])।


Comments

Popular posts from this blog

email - PHP mail error ... failed to open stream : permission denied -

c# - ListView onScroll event -

c - Linux mmap() error -