Red Hat Linux रिपोर्ट में सिस्टम पर वास्तव में उपलब्ध कम मेमोरी की रिपोर्ट क्यों नहीं करता है?


9

मेरे पास अपेक्षाकृत छोटा होम रेड हैट लिनक्स सर्वर (लगभग 8 जीबी रैम) है। मैं विभिन्न चीजों पर नज़र रखने के लिए कुछ घरेलू विकसित ऐप चलाने के अलावा इसका उपयोग नहीं करता। बॉक्स पर चलने वाली एकमात्र वास्तविक चीजें एक डेटाबेस और एक वेब सर्वर हैं।

मैंने देखा है कि जब NMON और TOP जैसे उपकरणों का उपयोग करते हुए सिस्टम काउंटर की जाँच करते हैं कि कुल सिस्टम मुक्त मेमोरी अपेक्षाकृत कम है (कुछ सौ एमबी के आदेश पर), जबकि डेटाबेस और वेब सर्वर के लिए सक्रिय मेमोरी अभी भी कम है (केवल एक संयुक्त 3 जीबी की खपत)। यहां तक ​​कि जब अन्य सभी चल रही प्रक्रियाओं को शामिल करते हुए कुल खपत स्मृति 4 जीबी से कम है।

Red Hat Linux कुल मेमोरी से कम मुक्त मेमोरी की रिपोर्ट करता है जो चल रही प्रक्रियाओं की उपयोग की गई मेमोरी का कुल योग है?

जवाबों:


19

अप्रयुक्त मेमोरी के साथ मुफ्त मेमोरी को भ्रमित न करें। नि: शुल्क मेमोरी, यूनिक्स दुनिया में भौतिक स्मृति का एक पृष्ठ है जिसमें कोई तार्किक डेटा नहीं है। अप्रयुक्त मेमोरी में कुछ डेटा मैप किया जाता है, लेकिन यह वर्तमान में चल रही प्रक्रिया द्वारा सक्रिय उपयोग में नहीं है।

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

लिनक्स (और सभी यूनिक्स OS'es) संभव के रूप में कम मुक्त स्मृति के लिए प्रयास करें। इसके बजाय वे स्मृति का उपयोग करते हैं जो विभिन्न IO हस्तांतरण कार्यों के लिए फ़ाइल कैश और बफ़र जैसी चीजों के लिए सक्रिय ओएस में प्रक्रियाओं के लिए मैप नहीं किया जाता है।

कुछ और जो आपको भ्रमित कर सकता है वह यह है कि आप उपयोग की आकृति में कुल मेमोरी प्राप्त करने के लिए सभी रनिंग प्रक्रियाओं द्वारा उपयोग में मेमोरी को नहीं जोड़ सकते। यदि आपने यह प्रयास किया है कि आप जल्दी से पता चल जाएगा कि आप आवेदन मशीन पर वास्तव में मौजूद है की तुलना में अधिक स्मृति का उपयोग करने के लिए दिखाई देते हैं। ऐसा दो कारणों से है

  1. मेमोरी को कॉपी-ऑन-राइट मेमोरी एलोकेशन, मेमोरी मैप्ड IO और शेयर्ड डायनामिक लाइब्रेरी के माध्यम से विभिन्न प्रक्रियाओं के बीच साझा किया जा सकता है
  2. ऑपरेटिंग सिस्टम स्वतंत्रता के लिए आवेदन के लिए अधिक मेमोरी का वादा करता है, जबकि यह वास्तव में आपूर्ति करता है। सिद्धांत यह है कि अधिकांश एप्लिकेशन लेखक एक बार में बड़ी मात्रा में मेमोरी माँगना पसंद करते हैं, ओवरहेड से बचने के लिए, और वास्तव में उस सभी मेमोरी का उपयोग नहीं कर सकते हैं।

इस मुद्दे पर चर्चा करने के लिए lwn.net पर हाल ही में एक लेख आया है


1
एक सरल विवरण भी यहां दिया गया है: linuxatemyram.com
स्टीवन टी। स्नाइडर

4

लिनक्स तेजी से डिस्क एक्सेस समय देने के लिए मेमोरी में सक्रिय रूप से फाइल सिस्टम एक्सेस को कैश करेगा। यह चिंता की कोई बात नहीं है।

बॉक्स पर फ्री-एम चलाने से आपको एक बेहतर विचार मिलेगा कि मेमोरी का उपयोग कहां किया जा रहा है।

नीचे मेरे एक बॉक्स से खींचा गया आउटपुट है। फ़ाइल सिस्टम एक्सेस अनुरोधों के लिए लगभग 4 जी कैश के साथ मुफ्त मेमोरी 147Meg है।

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722

1

क्या आप "बफ़र्ड" और "कैशेड" फ़ील्ड भी शामिल हैं?


1

लिनक्स के साथ, Committed_AS को / proc / meminfo में देखें, यह मेमोरी (वास्तविक + स्वैप) की मात्रा है जिसे कर्नेल ने वास्तव में चलने वाली प्रक्रियाओं का वादा किया है।

लिनक्स बहुत कुशलता से मेमोरी का उपयोग करता है, किसी भी प्रक्रिया के लिए वादा नहीं किए गए ब्लॉक का उपयोग हाल ही में / अक्सर एक्सेस की गई फ़ाइलों को कैश करने के लिए किया जाता है। इसलिए, लिनक्स के लिए विशिष्ट है कि सभी उपलब्ध भौतिक मेमोरी का 90% बूट के बाद लंबे समय तक उपयोग न करें।

देखो कि कर्नेल ने खुद को क्या प्रदान करने के लिए प्रतिबद्ध किया है .. और गंदे (स्वैप) उपयोग, यह आपको एक बेहतर समग्र चित्र प्रदान करता है।

यदि आपको इस व्यवहार को समायोजित करने की आवश्यकता है, तो कृपया अपना प्रश्न अपडेट करें :)

यह लिनक्स के लिए मानक एमओ है .. कुछ डिस्ट्रोफिक मैमोरी मैनेजमेंट के लिए अपनी जरूरतों को पूरा करने के लिए एससीटीसीएल के माध्यम से। हालाँकि, आप जो रिपोर्ट करते हैं वह सभी के बीच बहुत विशिष्ट है।


1

आप किस तरह के कर्नेल सिस्टम पर चल रहे हैं? एक 32-बिट कर्नेल केवल 3.6GB मेमोरी के आसपास रिपोर्ट करेगा, जब तक कि PAE सक्षम न हो।

यह कहते हुए कि, यदि यह Redhat Enterprise Linux (या CentOS) का आधुनिक संस्करण है - v3 इसके बाद - डिफ़ॉल्ट 32-बिट कर्नेल में यह सक्षम होगा।

यदि आप ऊपर दिए गए 'फ्री' कमांड के आउटपुट को पोस्ट कर सकते हैं, तो हम देख पाएंगे कि यह समस्या है या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.