'प्रक्रिया / मेमोरी / पीआईडी ​​/ स्मैप्स से' मेमोरी के उपयोग के बारे में जानकारी प्राप्त करना


46

किसी दिए /proc/<pid>/smapsगए मानचित्रण प्रविष्टि के लिए, में दी गई प्रक्रिया के लिए:

  1. Shared_Clean
  2. Shared_Dirty
  3. Private_Clean
  4. Private_Dirty

है Shared_Clean+ Shared_Dirtyस्मृति की मात्रा है कि अन्य प्रक्रियाओं के साथ साझा किया जाता है? तो यह साझा आरएसएस जैसा है?

इसी प्रकार Private_Clean+ Private_Dirtyमेमोरी की मात्रा जो केवल एक प्रक्रिया के लिए उपलब्ध है ? तो यह निजी आरएसएस की तरह है?

क्या PSS मान = PrivateRSS + (साझाकरण / इसे साझा करने की प्रक्रिया की संख्या) है?

इस लिंक को पढ़ने के बाद कुछ और सवाल: LWN

अब पूरी प्रक्रिया के बारे में बात करते हैं, जिसकी स्मैप प्रविष्टि हम देख रहे हैं।

मैंने देखा कि अगर मैं प्रक्रिया के लिए प्रत्येक smaps प्रविष्टि के लिए Shared_Clean+ Shared_Dirty+ Private_Clean+ करता हूं तो मुझे Private_Dirtyआरएसएस की प्रक्रिया मिलती है ps, जो कि बहुत अच्छी है। उदाहरण के लिए

ps -p $$ -o pid,rss

मुझे हर की राशि के रूप (लगभग) आरएसएस के लिए एक ही मूल्य दे देंगे Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirtyप्रवेश / proc / $$ / smaps।

लेकिन पूरी प्रक्रिया के लिए PSS का क्या ? तो, ऊपर के उदाहरण से मैं $ $ के लिए PSS कैसे प्राप्त करूं? क्या मैं हर smaps मैपिंग के लिए PSS प्रविष्टि जोड़ सकता हूं और $ $ के लिए PSS पर पहुंच सकता हूं?

और पूरी प्रक्रिया के लिए यूएसएस के बारे में क्या ? फिर से उदाहरण लेने के बाद मैं अनुमान लगा रहा हूं कि मैं US $ $ के लिए केवल Private_ * प्रविष्टियों को $ $ के लिए हर स्मैप प्रविष्टि के लिए संक्षेप में लिख सकता हूं .. सही है?

नोट्स:
PSS = आनुपातिक सेट आकार।
यूएसएस = अद्वितीय सेट आकार।

जवाबों:


50

स्वच्छ पृष्ठ वे पृष्ठ होते हैं जिन्हें मैप करने के बाद संशोधित नहीं किया जाता है (आमतौर पर, साझा पुस्तकालयों के पाठ अनुभाग केवल डिस्क से पढ़े जाते हैं (आवश्यक होने पर), कभी संशोधित नहीं होते हैं, इसलिए वे साझा, स्वच्छ पृष्ठों में होंगे)।
गंदे पृष्ठ वे पृष्ठ होते हैं जो साफ नहीं होते (अर्थात संशोधित किए गए हैं)।

निजी पृष्ठ केवल उस प्रक्रिया के लिए उपलब्ध हैं, साझा किए गए पृष्ठों को अन्य प्रक्रियाओं द्वारा मैप किया जाता है *

आरएसएस कुल पृष्ठों की संख्या है, साझा या नहीं, वर्तमान में प्रक्रिया में मैप किया गया है। तो Shared_Clean+ Shared_Dirtyआरएसएस का साझा हिस्सा होगा (यानी आरएसएस का वह हिस्सा जिसे अन्य प्रक्रियाओं में भी मैप किया जाता है), और Private_Clean+ Private_Dirtyआरएसएस का निजी हिस्सा (यानी इस प्रक्रिया में केवल मैप किया गया)।

PSS (आनुपातिक शेयर आकार) जैसा कि आप वर्णन करते हैं। निजी पृष्ठों को समान रूप से अभिव्यक्त किया गया है, और प्रत्येक साझा किए गए मैपिंग के आकार को विभाजित करने वाली प्रक्रियाओं की संख्या से विभाजित किया गया है।
इसलिए यदि किसी प्रक्रिया में 100k निजी पृष्ठ, 500k पृष्ठ एक अन्य प्रक्रिया के साथ साझा किए जाते हैं, और 500k चार अन्य प्रक्रियाओं के साथ साझा किए जाते हैं, तो PSS होंगे:

100k + (500k / 2) + (500k / 5) = 450k

आगे की रीडिंग:

प्रक्रिया-व्यापी रकम के बारे में:

  • RSSप्रविष्टियों को संक्षेप में प्राप्त (लगभग + ) किया जा सकता Rss:है smaps(आपको साझा / निजी साझा / गंदी प्रविष्टियों को जोड़ने की आवश्यकता नहीं है)।

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • आप Pss:प्रक्रिया-वैश्विक पाने के लिए मूल्यों को उसी तरह से जोड़ सकते हैं PSS
  • USSमें सूचित नहीं किया गया है smaps, लेकिन वास्तव में, यह निजी मैपिंग का योग है, इसलिए आप इसे उसी तरह से भी प्राप्त कर सकते हैं

* ध्यान दें कि "शेयर-सक्षम" पृष्ठ को निजी मानचित्रण के रूप में गिना जाता है जब तक कि यह वास्तव में साझा न हो। यदि वर्तमान में उपयोग करने वाली केवल एक प्रक्रिया है libfoo, तो लाइब्रेरी का पाठ अनुभाग प्रक्रिया के निजी मानचित्रण में दिखाई देगा । इसे साझा मैपिंग में (और निजी लोगों से हटाए जाने पर) खाता किया जाएगा, केवल तभी जब / जब कोई अन्य प्रक्रिया उस लाइब्रेरी का उपयोग करना शुरू करती है।
+ मान सभी प्रक्रियाओं के लिए बिल्कुल नहीं जोड़ते हैं। बिल्कुल पक्का नहीं क्यों ... सॉरी।


महान जवाब के लिए धन्यवाद। इसकी प्रशंसा करना। मैंने LWM लेख पढ़ा और इससे मुझे कुछ और प्रश्न पूछने की प्रेरणा मिली, इसलिए मैंने उन्हें अपने प्रश्न के साथ जोड़ा।
अंकुर अग्रवाल

महान! यह बहुत मददगार है !!
कैमिनो

मैं अभी भी share_dirty के बारे में उलझन में हूँ - क्या इस की गंदे प्रकृति को इसे अभी भी साझा करने से रोका जा रहा है?
केविन

@ केविन: यदि वे साझा नहीं किए गए थे, तो उनका हिसाब नहीं दिया जाएगा Shared_Dirty- क्या आप अपना प्रश्न स्पष्ट कर सकते हैं?
Mat

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