2012-06-18 18 views
8

मेरे पास एक सी ++ प्रोग्राम/लिनक्स है, जो 32 जीबी रैम पर त्रुटि std::bad alloc त्रुटि (और रैपर कॉलर द्वारा पुनरारंभ हो जाता है) में स्पिटिंग शुरू होता है। मुझे इस समस्या को हल करने के लिए वास्तव में क्या ख्याल है, लेकिन मैं कदम से कदम उठाना चाहता हूं और समस्या की मेरी समझ में अपना विश्वास बढ़ा सकता हूं।std :: bad_alloc त्रुटि हो रही है; यह सत्यापित करने के लिए कि ओएस वास्तव में मेमोरी से बाहर हो रहा है

ऐसा लगता है कि सिस्टम new अनुरोध के लिए स्मृति आवंटित करने में सक्षम नहीं है (यह तब होता है जब ओएस स्मृति से बाहर हो जाता है)। जबकि प्रोग्राम चल रहा है, एक और टर्मिनल पर मैं सबसे छोटे अंतराल (1 सेकंड) के साथ sar कमांड चलाता हूं, लेकिन मुझे लगता है कि kbcached ~ 24GB मेमोरी है। ओएस कैशिंग को रिहा करने में सक्षम क्यों नहीं है और उस मेमोरी को new अनुरोध पर उपलब्ध कराया गया है? या तो 1 सेकंड बहुत अधिक समय है (तुलनात्मक कार्यक्रमों की तुलना में) या मैं यहां कुछ गलत कर रहा हूं।

असल में मैं क्रॉस-सत्यापित करना और पिन-पॉइंट करना चाहता हूं कि ओएस वास्तव में स्मृति से बाहर हो रहा है और इस प्रकार स्मृति आवंटित करने में सक्षम नहीं है, और फिर इस बिंदु से चीजें लेते हैं। यह कैसे करना है?

आदर्श रूप में, मैं सही बिंदु पर सिस्टम आँकड़े चाहते हैं जब स्मृति आवंटन, विफल रहता है कितना कैशिंग, कुल का इस्तेमाल किया स्मृति की तरह आदि

+2

बस एक नोट .. इसके पास आपके पास रैम के साथ कुछ भी नहीं है, यह इस बात पर निर्भर करता है कि वर्चुअल मेमोरी एड्रेस स्पेस में कितनी मुफ्त मेमोरी मौजूद है। हालांकि वर्चुअल मेमोरी आवंटन प्रक्रिया को जांचने के लिए मुझे कमांड नहीं पता है। – Naveen

+0

मुझे लगता है कि यह ओएस-विशिष्ट होगा। – sharptooth

+0

आपकी प्रक्रिया कितनी मेमोरी आवंटित की गई? आपकी प्रक्रिया में क्या बाधाएं हैं? क्या यह 32 बिट है? –

उत्तर

2

आप वास्तव में देखने के लिए कैसे अपने प्रक्रिया की स्मृति आवंटित किया जाता है चाहते हैं , अपवाद फेंकने के लिए आप gdb के साथ ब्रेकपॉइंट सेट कर सकते हैं। जब ऐसा होता है, तो pmap जैसे टूल के साथ प्रक्रिया का निरीक्षण करें, जो आपको स्मृति के उपयोग की प्रक्रिया के बारे में अतिरिक्त जानकारी दिखा सकता है।

तो वह भी आदिम है (और यह जल्दी हो जाएगा, pmap सुंदर आदिम है), valgrind स्मृति उपयोग, CPU उपयोग, और अन्य क्रम समस्याओं के निदान के लिए पुंजक और कई अन्य सुविधाएं भी शामिल है।

+1

विशेष रूप से (इस मामले में), वाल्ग्रिंड मासेफ उपकरण। मैसिफ़ आवंटन ट्रैक करता है और एक समयरेखा पर स्मृति खपत का ग्राफ प्राप्त करने की अनुमति देता है; और प्रत्येक स्नैपशॉट के लिए, यह पहचानता है कि आवंटन कहां से आया था। –

+0

@MatthieuM। शायद आपकी टिप्पणी अपने आप का जवाब होना चाहिए? – RedX

+1

@RedX: कुछ और कहने के लिए, इसलिए मैं स्टीवन को अपने उत्तर में विवरण जोड़ दूंगा यदि वह उन्हें लायक बनाता है। –