दोस्तों पर स्मृति भ्रष्टाचार का पता लगाना, क्या आप कृपया सी ++ के साथ निर्मित उत्पादन मल्टीथ्रेड सर्वर पर मेमोरी भ्रष्टाचार को ढूंढने और लिनक्स x86_64 के तहत काम करने के लिए एक उपकरण की सिफारिश कर सकते हैं? मुझे वर्तमान में निम्न समस्या का सामना करना पड़ रहा है: हर सर्वर में मेरा सर्वर एक सेगफॉल्ट के साथ दुर्घटनाग्रस्त हो जाता है और कोर डंप से पता चलता है कि त्रुटि malloc/calloc में होती है जो निश्चित रूप से कहीं भी दूषित स्मृति का संकेत है।उत्पादन लिनक्स सर्वर
दरअसल मैंने पहले से ही कुछ भाग्य के बिना कुछ टूल आजमाए हैं।
वेलग्रिंड एक महान (मैं भी कहेंगे सबसे अच्छा) उपकरण है, लेकिन यह सर्वर धीमा बहुत ज्यादा यह उत्पादन में व्यर्थ कर रही है: यहाँ मेरा अनुभव अब तक है। मैंने इसे स्टेज सर्वर पर आज़माया और वास्तव में मुझे कुछ स्मृति संबंधी मुद्दों को खोजने में मदद मिली लेकिन उन्हें ठीक करने के बाद भी मुझे उत्पादन सर्वर पर दुर्घटनाएं मिलती हैं। मैंने कई घंटे तक वालग्रींड के तहत अपना मंच सर्वर चलाया लेकिन फिर भी कोई गंभीर त्रुटियां नहीं मिलीं।
इलेक्ट्रिकफ़ेंस को वास्तविक स्मृति हॉग कहा जाता है लेकिन मैं इसे ठीक से काम नहीं कर सका। यह लगभग तुरंत यादृच्छिक अजीब स्थानों में मंच सर्वर पर segfaults जहां Valgrind कोई भी मुद्दा नहीं दिखाया। शायद इलेक्ट्रिकफेंस अच्छी तरह से थ्रेडिंग का समर्थन नहीं करता है? .. मुझे नहीं पता।
डुमा - इलेक्ट्रिकफ़ेंस के समान कहानी लेकिन इससे भी बदतर। जबकि ईएफ ने पठनीय बैकट्रैस के साथ कोर डंप का उत्पादन किया है, डीयूएमए मुझे केवल "?????" दिखाता है (और हाँ सर्वर निश्चित रूप से ध्वज के साथ बनाया गया है)
dmalloc - मैंने मानक मैलोक के बजाय सर्वर का उपयोग करने के लिए कॉन्फ़िगर किया दिनचर्या हालांकि यह कई मिनट के बाद लटकती है। । संलग्न की प्रक्रिया के लिए एक gdb का पता चलता है यह dmalloc :(
मैं धीरे-धीरे पागल हो रही है और बस आगे क्या करना है पता नहीं है में कहीं लटका दिया है मैं निम्नलिखित उपकरणों की कोशिश की जा करने के लिए है: mtrace, mpatrol लेकिन शायद किसी को एक बेहतर विचार है
मैं बहुत इस मुद्दे पर किसी भी मदद की सराहना करेंगे,
अद्यतन:?।। मैं बग का स्रोत खोज करने में कामयाब हालांकि मैं मंच सर्वर पर नहीं मिला उत्पादन एक हेल्ग्रिंड/डीआरडी/tsan का उपयोग कर - कई धागे के बीच एक डाटरस था जिसके परिणामस्वरूप स्मृति भ्रष्ट आयन। कुंजी उचित वाल्ग्रिंड दमन का उपयोग करना था क्योंकि इन उपकरणों ने बहुत अधिक झूठे सकारात्मक दिखाए थे। फिर भी मैं सच में नहीं पता कि यह कैसे किसी भी महत्वपूर्ण मंदी के बिना उत्पादन सर्वर पर खोज की जा सकती है ...
क्या आपने LD_PRELOAD env चर में libefence संकलित या उपयोग किया था? इलेक्ट्रिकफेंस थ्रेड सुरक्षित माना जाता है अगर इसे -DUSE_SEMAPHORE –
के साथ संकलित किया गया है, तो मैं libefense.a नहीं उपयोग कर रहा हूं। और मैंने इसे स्वयं संकलित नहीं किया, मैंने Gentoo पर उभरने का उपयोग किया। क्या आप इस ध्वज के बजाय मैन्युअल रूप से इसे स्थापित करने की अनुशंसा करेंगे? – pachanga
एक चीज जो मदद कर सकती है वह है +/- 200 बाइट्स जहां सेग गलती ने कहा कि डेटा दूषित है। डेटा को देखकर आप एक विचार प्राप्त कर सकते हैं कि स्मृति भ्रष्टाचार का कारण क्या है। – steve