लिनक्स में मेमोरी का उपयोग कैसे बताया जाता है?


17

पीएस का उपयोग करते हुए, मैं आकार, बनाम आकार (शीर्ष के वीआईआरटी के रूप में ही देख सकता हूं?) और आरएसएस (शीर्ष के RES के समान?)। (एक और मैं शीर्ष में देख रहा हूँ SHR है।)

क्या कोई मेरे लिए संक्षेप में बता सकता है कि इन विभिन्न क्षेत्रों का क्या मतलब है?


मैं इस पृष्ठ पर एक लिंक की तुलना में एक अच्छा सारांश देख सकता हूं जो गायब हो सकता है ताकि यह पृष्ठ संदर्भ के रूप में रह सके।
जिम हंज़िकेर

जवाबों:


34

संक्षेप में:

  • वर्चुअल साइज़: एड्रेस स्पेस की मात्रा है जो एक प्रक्रिया का प्रबंधन कर रही है। वर्चुअल एड्रेस स्पेस में वह सबकुछ होता है जो प्रक्रिया पॉइंटर्स (मेमोरी एड्रेस रेफरेंस) के माध्यम से एक्सेस कर सकती है। उदाहरण के लिए, यदि आपके प्रोग्राम को आपके वीडियो कार्ड के फ्रेमबफ़र तक पहुंच मिलती है, तो उस मेमोरी को प्रोसेस वर्चुअल स्पेस में मैप किया जाता है और एक एड्रेस प्राप्त होता है जिसे पॉइंटर में स्टोर किया जाता है। मेमोरी-मैप की गई फाइलें और अनाम मैपिंग भी वर्चुअल एड्रेस स्पेस साइज में शामिल हैं। सुंदर सब कुछ आभासी आकार में है। यदि आप सूचीबद्ध सभी पता श्रेणियों के आकार को जोड़ते हैं /proc/<pid>/maps, तो यह आपको आभासी आकार के लगभग एक ही मूल्य पर लौटना चाहिए।

  • निवासी का आकार: स्मृति की मात्रा है जो विशेष रूप से उस प्रक्रिया से संबंधित है जो वर्तमान में स्मृति में निवासी है। इसका मतलब है, स्मृति की मात्रा जो स्वैप में नहीं है। ध्यान दें कि प्रक्रिया के कुछ भाग स्वैप मेमोरी में हो सकते हैं, भले ही प्रक्रिया चल रही हो। ऑपरेटिंग सिस्टम इन क्षेत्रों को स्वैप से तब खींचेगा जब प्रक्रिया इसे एक्सेस करने की कोशिश करेगी। इसमें ढेर, सभी धागे और अन्य निजी मैपिंग के ढेर शामिल होना चाहिए। यदि आप में देखो /proc/<pid>/maps, [stack], [heap]और अन्य अज्ञात मैपिंग (फ़ाइल पथ के बिना उन) या तो बदली या निवासी आकार में हिसाब कर रहे हैं।

  • साझा आकार: स्मृति की मात्रा है जो कई प्रक्रियाओं से संबंधित हो सकती है। उदाहरण के लिए, यदि आपके पास स्मृति में लोड किए गए एक ही अनुप्रयोग के चार उदाहरण हैं, तो आपके पास ढेर के चार उदाहरण और कम से कम चार ढेर होंगे, प्रत्येक प्रक्रिया के लिए एक (यह निवासी मेमोरी है), लेकिन आपके पास केवल एक ही उदाहरण होगा कार्यक्रम और इसके पुस्तकालयों का बाइनरी कोड। यह साझा स्थान है। न केवल इसमें प्रोग्राम बाइनरी कोड और इसके लाइब्रेरी शामिल हैं, बल्कि स्थानीयकरण फ़ाइलें, रीड-ओनली प्रोग्राम डेटा, SysV और POSIX साझा मेमोरी सेगमेंट, सेमाफोर आदि शामिल हैं ... यदि आप देखते हैं /proc/<pid>/maps, तो अधिकांश मैपिंग लाइब्रेरी और प्रोग्राम फ़ाइलों से बंधे हैं। साझा की है।

ध्यान दें कि VIRT में RSS और SHR का मिलन होता है, और हमेशा उनमें से किसी एक से अधिक होगा। आरएसएस और SHR दोनों के रूप में क्षेत्र हो सकते हैं।


2
संयोग से, लिनक्स के हाल के संस्करणों पर आप मेमोरी के उपयोग का एक बहुत ही विस्तृत ब्रेकडाउन देख सकते हैं / proc / <pid> / smaps
bdonlan

1
साझा आकार स्मृति है जिसे साझा किया जा सकता है। यदि कोई एप्लिकेशन लाइब्रेरी का एकमात्र उपयोगकर्ता है, तो लाइब्रेरी को एकल प्रक्रिया द्वारा मेमोरी में रखा जाएगा। इस तरह से भी साझा की गई मेमोरी "प्रोसेस ओनरशिप" मेमोरी हो सकती है।
ह्यूबर्ट करियो

6

जूलियानो जवाब में:

ध्यान दें कि RSS + SHR <= VIRT, हमेशा।

यह सिर्फ झूठ है। SHR में सभी वर्चुअल मेमोरी हैं जिन्हें अन्य प्रक्रियाओं के साथ साझा किया जा सकता है, और RSS में रैम में भौतिक रूप से सभी मेमोरी शामिल हैं जो प्रक्रिया द्वारा उपयोग की जाती हैं।

इस प्रकार रैम में वर्तमान में साझा की गई सभी मेमोरी को SHR और RSS दोनों में गिना जाता है, इसलिए SHR + RSS का कोई अर्थ नहीं है क्योंकि इसमें डुप्लिकेट काउंट हो सकते हैं।

RSS + SHR> VIRT के साथ एक प्रक्रिया का निर्माण करने के लिए, एक बड़ी फ़ाइल (1GB) को केवल मिमीप करें, फिर इसे पूरी तरह से पढ़ें: mmaped फ़ाइल को RAM में लोड किया जाएगा, और VIRT, SHR और RSS प्रत्येक 1GB से बड़े हो जाएंगे, इसलिए SHR + RSS> VIRT।


हाँ, यह अन्य दो की तुलना में VIRT के बारे में अधिक विवरण था। मेरे मन में आरएसएस और SHR के संघ के बारे में उनकी राशि से अधिक था, अर्थात VIRT में RSS और SHR दोनों शामिल हैं। गरीब गणितीय प्रतिनिधित्व।
जुलियानो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.