2009-05-12 9 views
5

मैं कैसे पता लगा सकता हूं कि लिनक्स प्रक्रिया की पृष्ठ तालिका कितनी बड़ी है, साथ ही किसी भी अन्य चर-आकार प्रक्रिया लेखांकन के साथ?लिनक्स प्रक्रिया के पृष्ठ तालिका आकार और अन्य कर्नेल एकाउंटिंग को कैसे ढूंढें या गणना करें?

+0

मुझे आपके प्रश्न को समझने के लिए निश्चित नहीं है: पृष्ठ तालिका का आकार, AFAIK, एक ही मंच पर निर्भर प्रक्रिया नहीं है (ठीक है, मैं गलत हो सकता हूं, मैं लिनक्स गुरु नहीं हूं ..)। बीटीडब्ल्यू मुझे आश्चर्य है: क्या आप वास्तव में पेज * टेबल * आकार का मतलब है? या आप इसका मतलब है * पेज आकार *, क्योंकि प्रोग्रामर आईएमएचओ द्वारा इसे अधिक बार आवश्यकता होती है? –

+0

मेरा मतलब है (कर्नेल) मेमोरी की मात्रा जो एक विशेष प्रक्रिया की पृष्ठ तालिका खपत कर रही है। –

उत्तर

1

लिनक्स के बारे में निश्चित नहीं है, लेकिन अधिकांश यूनिक्स वेरिएंट इस उद्देश्य के लिए sysctl(3) प्रदान करते हैं। sysctl(8) कमांड लाइन उपयोगिता भी है।

+0

क्या यूनिक्स आपको sysctl के माध्यम से pagetablesize (पृष्ठों के विपरीत) पढ़ने के लिए अनुमति देता है? – eckes

5

तुम सच में पृष्ठ सारणी में रुचि रखते हैं,

$ cat /proc/meminfo | grep PageTables 
PageTables:  24496 kB 
+1

यह उपयोगी है, लेकिन मुझे यह पता लगाने की आवश्यकता है कि यह आकार "बहुत बड़ा" है या नहीं। अगर इस आकार की कोई सीमा है जो फोर्क() को विफल करने के लिए कॉल करेगी, और उस सीमा के करीब कितना कर्नेल है। आदर्श रूप से, मुझे यह भी पता लगाना होगा कि उस पृष्ठ के आकार का किस हिस्से का उपयोग किसी विशिष्ट प्रक्रिया द्वारा किया जा रहा है, जैसे कि जब फोर्क() उस प्रक्रिया के लिए तालिकाओं की प्रतिलिपि बनाने का प्रयास करता है, तो सीमा पार हो जाएगी। –

1

हममम, ये इन गोल्डन Tymes में वापस आ गया है, हम nlist कहा करते थे एक (3) डेटा हम रुचि रखते थे के लिए प्रणाली का पता पाने के लिए क्या में, फिर खुला/dev/kmem, पते की तलाश करें, फिर डेटा पढ़ें। यह सुनिश्चित नहीं है कि यह लिनक्स में काम करता है, लेकिन यह "मैन 3 नलिस्ट" टाइप करने और वापस आने के लायक होने के लायक हो सकता है।

1

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

थैड ने कहा, मैं भी लिनक्स में एक प्रक्रिया पेजेटिव शेयर पढ़ने में रुचि रखूंगा।

अंगूठे के एक साधारण नियम के रूप में आप हालांकि यह मान सकते हैं कि प्रत्येक प्रक्रिया पैगेटेबल में एक शेयर को खो देती है जो इसके वर्चुअल आकार के बराबर होती है, उदाहरण के लिए प्रत्येक पृष्ठ के लिए 6 बाइट्स। तो उदाहरण के लिए यदि आपके पास 8 जीबी एसजीए और 500 प्रोसेसिंग के साथ ओरेकल डाटाबेस है, तो प्रत्येक प्रक्रिया 14 एमबी पेजेटेबल का उपयोग करेगी, जिसके परिणामस्वरूप 7 जीबी पेजेटेबल्स + 8 जीबी एसजीए होगा। (http://kevinclosson.wordpress.com/2009/07/25/little-things-doth-crabby-make-%E2%80%93-part-ix-sometimes-you-have-to-really-really-want-your-hugepages/ से नमूना संख्या)

+0

ओह बीटीडब्ल्यू, अब विशाल पृष्ठों के साथ कुछ संख्याएं: http://kevinclosson.wordpress.com/2009/07/28/quantifying-hugepages-memory-savings-with-oracle-database-11g/ – eckes

7

लिनक्स 2.6.10 के बाद से, एक प्रक्रिया द्वारा उपयोग की गई स्मृति की मात्रा 'पृष्ठ तालिका /proc/<pid>/status के वीएमपीटीई क्षेत्र के माध्यम से उजागर की गई है।

+0

ऐसा लगता है कि यह अच्छी तरह से काम करता है , जब मैं एमएमएपी के साथ विशाल पृष्ठों को आवंटित करता हूं: आवंटित आकार एक छोटा स्थिर है, आवंटन का आकार चाहे (कर्नेल 4.4.0-77)। –

+0

फ़ील्ड VmPMD फ़ील्ड द्वारा रिपोर्ट किया गया मान ठीक लगता है, यह विशाल पृष्ठों के साथ भी आवंटन के आकार के साथ रैखिक रूप से बढ़ता है। लेकिन मुझे नहीं लगता कि यह पूरे पृष्ठ तालिका के लिए खाता है (आदमी कहता है "द्वितीय स्तर के पेज टेबल का आकार")। शास्त्रीय पृष्ठों के साथ प्रयोग करते समय, यह मान VmPTE से लगभग 500 गुना कम है। –

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