2014-10-22 10 views
6

मैं एक एम्बेडेड सिस्टम पर 512 एमबी रैम और एप्लिकेशन का समर्थन करने के लिए पर्याप्त स्वैप मेमोरी पर काम कर रहा हूं। कर्नेल से, मैंने राम आकार को कर्नेल cmd तर्क से 130 एमबी तक सीमित कर दिया है। और swapoff -a का उपयोग करके स्वैप अक्षम कर दिया। मैंने कर्नल ओवरकमिट को भी अक्षम कर दिया है, ताकि एप्लिकेशन अकेले भौतिक स्मृति में चलाया जा सके। मैंने /proc/cmdline और /proc/meminfo से परिवर्तनों की पुष्टि की। अब जब मैं एप्लिकेशन चलाता हूं और शीर्ष मानों की जांच करता हूं, तो मेरे आवेदन के लिए वीएसजेड 177 मीटर है जो वास्तविक स्मृति से अधिक है !! यह कैसे संभव है? यह स्मृति कहां से आई थी?लिनक्स में स्मृति उपयोग भौतिक RAM से अधिक क्यों है?

+2

मेमोरी मैप की फ़ाइलें? वर्चुअल एड्रेस स्पेस में दो बार मैप किया गया है? प्रक्रिया मेमोरी मानचित्र की जांच करें। –

+0

http://linuxatemyram.com/ और '/ proc/$ पीआईडी ​​/ मानचित्र' –

उत्तर

6

वीएसजेड वर्चुअल मेमोरी आकार है जिसका उपयोग प्रक्रिया द्वारा किया जाता है। यह सामान्य है कि यह आपकी भौतिक स्मृति के आकार से अधिक है क्योंकि यह इस के मुख्य विचारों में से एक है। आपको निवासी आकार (आरएसएस) को देखना चाहिए जो प्रक्रिया द्वारा उपयोग की जाने वाली वास्तविक भौतिक स्मृति है। इस उदाहरण को

देखो:

ps -o rss,vsz,cmd ax | grep -i nginx | head -n1 
    956 31248 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 

rss - 956 kB 
vsz - 31248 kB 

तो, इसका मतलब है कि इस प्रक्रिया के भौतिक स्मृति की 956kB उपयोग कर रहा है, और आभासी स्मृति के 31MB:

मैं एक nginx प्रक्रिया चल रहा है।

स्वैप अक्षम करना (swapoff -a), जैसा आपने किया था, वर्चुअल मेमोरी का उपयोग अक्षम नहीं करता है।

पढ़ें के बारे में आभासी यहाँ स्मृति: Virtual memory

+0

क्या वर्चुअल मेमोरी पर सीमा निर्धारित करना संभव है ?? मैं सिर्फ उत्सुक हूं .... – Griffin

+0

मुझे नहीं लगता कि आपने समझाया कि क्यों 'swapoff -a' का परिणाम वीएमएम उपयोग नहीं होता है। * स्वैप * केवल * पढ़ने-लिखने * स्मृति या प्रोग्राम डेटा के लिए उपयोग किया जाता है। प्रोग्राम कोड के लिए, लिनक्स * आभासी फ़ाइल सिस्टम * के पास एक पृष्ठ का पता लगाने (पुनः लोड) करने का एक तरीका है। यदि कोड किसी पते पर कूदता है, तो कोड * दोष * और डेटा डिस्क से लोड होता है। इस तरह, जब कोई प्रोग्राम शुरू होता है तो पूरी चीज स्मृति में लोड नहीं होती है; केवल * प्रारंभ * पता पृष्ठ। इसी प्रकार जब मेमोरी प्रेशर के तहत, शायद ही कभी इस्तेमाल किया गया कोड बंप हो सकता है। –

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