मेरे पेज टेबल में इतनी मेमोरी क्यों है?


10

मेरा 64-बिट विंडोज 7 पीसी बहुत सुस्त है। मैंने टास्क मैनेजर में देखा कि मेरी मेमोरी का उपयोग 100% के पास है - हालाँकि प्रत्येक प्रक्रिया के लिए रिपोर्ट किया गया उपयोग कुल 6GB (फ़ायरफ़ॉक्स 500MB के बारे में नहीं दिखाता है, बाकी सब बहुत कम)। मैंने RAMMap डाउनलोड किया और पाया कि पेज टेबल काफी मात्रा में मेमोरी (2.5GB) ले रहा है।

Rammap स्क्रीनशॉट

मैंने इसे देखा और कहीं नहीं गया - जाहिर है कि पृष्ठ तालिका खंडित हो सकती है। जाहिर है मैं मशीन को रिबूट करूंगा और देखूंगा कि क्या मदद मिलती है। लेकिन क्या इसे ठीक करने का एक बेहतर तरीका है?

EDIT: रिबूट किया गया, और पेज टेबल 30MB तक नीचे है।

EDIT 2: अपटाइम के कुछ दिनों के बाद, पेज टेबल का उपयोग फिर से रेंग रहा है। मैंने पृष्ठ तालिका उपयोग के स्रोत को खोजने के लिए इस उत्तर में @ Magicandre1981 के निर्देशों का पालन किया । दुर्भाग्य से मैंने एक रिक्त आकर्षित किया - पृष्ठ तालिका का उपयोग "अज्ञात" द्वारा किया जाता है!

WPA स्क्रीनशॉट

किसी को कोई उज्ज्वल विचार मिला?


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

1
नहीं, मुझे लगता है कि यह उपयोग में भौतिक स्मृति है, आभासी नहीं। मुझे लगा कि पेज टेबल मेमोरी मैनेजर के लिए किसी प्रकार का संदर्भ है?
बेन्शेफर्ड

2
जैसा कि मैंने सवाल में कहा, ऐसी कोई प्रक्रिया नहीं है जो मेमोरी का उपयोग कर रही हो। मैं इस धारणा के तहत था कि पेज टेबल पेज फाइल के लिए एक अलग चीज थी ।
बेन्शेफर्ड


1
पेज टेबल पेज फाइल से बहुत अलग चीज है। नीचे मेरा जवाब देखें। इसके अलावा, जबकि पेजफाइल खंडित हो सकता है, पेज टेबल ... ठीक है, वे हमेशा खंडित होते हैं (जैसा कि पूरे रैम में बिखरा हुआ है) और यह थोड़ी सी भी बात नहीं करता है।
जेमी हनराहन

जवाबों:


5

मुझे सवाल पर टिप्पणी करने की आवश्यकता है, विशेष रूप से "पेज टेबल" और "पेज फाइल" के बीच भ्रम। यह एक उत्तर नहीं है, लेकिन यह टिप्पणियों के लिए स्वीकृत स्थान में फिट नहीं होगा।

"पेज टेबल" वास्तव में पेजफाइल से बहुत अलग चीज है। बीत रहा है n पृष्ठ सारणी के लिए इस्तेमाल किया रैम एमबी मतलब यह नहीं है कि आप प्रयोग कर रहे हैं n पृष्ठ फ़ाइल स्थान की एमबी। और हालांकि कुछ पेज टेबल एंट्रीज (PTE, जो पेज टेबल से मिलकर बने होते हैं) पेजफाइल कंटेंट को संदर्भित करते हैं, सभी नहीं।

पृष्ठ सारणी एक इन-मेमोरी स्ट्रक्चर्स हैं जिनका उपयोग सीपीयू के एमएमयू द्वारा वर्चुअल एड्रेस (फिर से, पेजफाइल नहीं) से भौतिक पते तक ट्रांसलेशन करने के लिए किया जाता है, और ओएस द्वारा वर्चुअल एड्रेस स्पेस का ट्रैक रखने और पेज के दोषों को सुलझाने में मदद करने के लिए उपयोग किया जाता है। पेज टेबल में पेज टेबल एंट्री (PTE) होती है। प्रत्येक PTE 8 बाइट्स पर कब्जा कर लेता है और वर्चुअल एड्रेस स्पेस के 4K बाइट्स को परिभाषित करता है - यानी एक वर्चुअल पेज। आभासी पता स्थान के प्रत्येक मुक्त पृष्ठ के लिए मोटे तौर पर, एक पीटीई है।

वैसे, हालांकि पेजफाइल बाहरी और आंतरिक दोनों विखंडन का अनुभव कर सकता है (पूर्व में आमतौर पर कोई समस्या नहीं होती है, बाद वाले को लगभग चार गुना बड़ा बनाकर इसे अलग किया जा सकता है), पेज टेबल नहीं कर सकते। वे हमेशा पहले से ही खंडित हैं, और यह थोड़ी सी भी बात नहीं है।

प्रत्येक PTE में एक "वैध" बिट है। "वैध", उर्फ ​​"निवासी" पृष्ठों के लिए, PTE में भौतिक पृष्ठ संख्या होती है जो PTE के साथ जुड़े वर्चुअल पेज नंबर से मेल खाती है; इसका उपयोग सीधे MMU द्वारा किया जाता है।

"अमान्य" पन्नों के लिए MMU एक पृष्ठ दोष और PTE उठाता है तो कई संभावित प्रारूप और व्याख्याएं हैं।

नोट: उपरोक्त सभी किसी भी ऑपरेटिंग सिस्टम पर लागू होता है जो x86 / x64 पर पेजिंग को सक्षम करता है। निम्नलिखित विंडोज के लिए काफी हद तक विशिष्ट है, लेकिन कई अवधारणाएं अन्य ओएस पर लागू होती हैं, कार्यान्वयन के विवरण में अंतर के साथ।

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

मैं इस सब का उल्लेख ज्यादातर यह दिखाने के लिए करता हूं कि संबंधित पेजफाइल और पेज टेबल, निश्चित रूप से एक ही चीज नहीं हैं।

पृष्ठ तालिकाओं को एक वृक्ष संरचना में व्यवस्थित किया जाता है। प्रत्येक प्रक्रिया के लिए एक अलग पेड़, या पेज टेबल का संग्रह है - यह वह है जो प्रत्येक प्रक्रिया को वर्चुअल एड्रेस स्पेस के अपने उदाहरण को परिभाषित करने की अनुमति देता है। पेड़ की जड़ में पेज टेबल हर समय रैम में होना चाहिए। दूसरों को दगा दे रहे हैं; वे अस्तित्वहीन भी होते हैं, जहाँ वे अपरिभाषित, या मुक्त, वर्चुअल एड्रेस स्पेस के बड़े (न्यूनतम 2 एमबी) क्षेत्रों के अनुरूप होंगे।

पेड़ की "पत्तियों" पर टेबल में पेज टेबल प्रविष्टियां वर्चुअल एड्रेस स्पेस के पन्नों से मेल खाती हैं। उच्च-स्तरीय तालिकाओं में पीटीई - रूट (और रूट स्वयं) के करीब वाले - बताएं कि अगले निचले-स्तरीय टेबल कहां हैं (यदि वे सभी मौजूद हैं)।

रैममैप द्वारा दर्शाई गई संख्या, सभी प्रक्रियाओं के लिए निवासी (इन-रैम) पृष्ठ तालिकाओं के साथ-साथ ओएस द्वारा अधिगृहीत भौतिक मेमोरी (RAM) है।

यहां जो महत्वपूर्ण है वह यह है कि OQ में सिस्टम में 2.5 जीबी रैम था जो पेज टेबल के साथ बंधा था। इसका मतलब है कि, कम से कम, 2.5 जीबी पेज टेबल परिभाषित है। चूँकि पेज टेबल अपने आप में पेजेबल हैं, इसलिए वर्चुअल साइज़ फिजिकल साइज़ से बहुत बड़ा हो सकता है, जो सभी RAMmap हमें दिखा सकते हैं। लेकिन मान लें कि यह "केवल" 2.5 जीबी है। PTE प्रति आठ बाइट्स पर है जो लगभग 320 मिलियन PTE है। 4K बाइट्स - - चूंकि प्रत्येक PTE एक पृष्ठ को परिभाषित करता है वर्चुअल ऐड्रेस स्पेस की, इसका मतलब है कि 1.2 से अधिक टेराबाइट्स वर्चुअल ऐड्रेस स्पेस के द्वारा परिभाषित कर रहे इन-स्मृति पृष्ठ सारणी।

यह असंभव नहीं है लेकिन यह बहुत कुछ है।

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

इसलिए: अपराधी को खोजने के लिए, मैं पहले उच्च "वर्चुअल बाइट्स" काउंटर मान वाली प्रक्रियाओं के लिए प्रक्रिया श्रेणी के तहत प्रदर्शन मॉनिटर में देखूंगा।


4

लेनोवो "रैपिडबूट शील्ड" मेरे लिए अपराधी था।

एक हफ्ते के बाद रिबूट के बिना मेरा "पेज टेबल" 4 जीबी + का उपयोग कर रहा था। यह पता चला कि प्रत्येक समाप्ति प्रक्रिया 20K RAM (4K निजी, 16K पेज टेबल) का उपयोग करते हुए अटक गई, जैसा कि रामपुस के "प्रोसेस" टैब में दिखाया गया है, और उनमें से ~ 200,000 थे!

रिबूटिंग ने सूची को कम कर दिया लेकिन यह फिर से बढ़ने लगा। यह नोटपैड खोलकर, इसे मारकर और यह देखते हुए कि यह रामपुर प्रक्रिया सूची में रहता है, प्रतिलिपि प्रस्तुत करने योग्य था।

इस तकनीकी थ्रेड के सुझावों के आधार पर मैंने "रैपिडबूट शील्ड" की स्थापना रद्द की, मशीन को रिबूट किया और फिर मारे जाने पर आसपास कोई प्रक्रिया नहीं रह गई। समस्या सुलझ गयी!


3

मेरे मामले में ये थे Aaddf.sys और Hardlock.sys फ़िल्टर ड्राइवर, अलादीन नॉलेज सिस्टम अलादीन ड्राइवरों से । मैं उस जवाब को खोजने में कामयाब रहा हूं जिसमें RAMMap का भी उपयोग किया गया है। यह स्मृति को प्रदर्शित करता है, समाप्त प्रक्रिया द्वारा भस्म हो जाता है। Windows प्रक्रिया सूची से प्रक्रियाओं को हटा दिया गया था फिर भी मेमोरी मैप में बनी रही। ड्राइवर प्रक्रियाओं को पूरी तरह से समाप्त करने से रोकते हैं।


1

मैंने अपने आईटी विभाग से इस बारे में पूछा, और वे भी इसी तरह से बाँस लगाए गए। मैंने अपने ड्राइवरों को अपडेट करने के लिए DriverEasy का उपयोग किया । जो अंतर करने के लिए लग रहा था, अजीब तरह से, मॉनिटर ड्राइवर थे। पहले मेरे पास मानक विंडोज "जेनेरिक PnP मॉनिटर" ड्राइवर थे। लेकिन जब मैंने उन लोगों को अपने मॉनिटर के सही मेक और मॉडल के लिए अपडेट किया, तो समस्या दूर होती दिख रही थी।


1

RamMap में "प्रक्रियाएं" टैब खोलें और नाम से सॉर्ट करें। एक ही प्रक्रिया के एक संदिग्ध उच्च संख्या के लिए देखो। मेरी मशीन पर, "SynTPEnh.exe" अपराधी था (टचपैड ड्राइवर का एक हिस्सा)। अपटाइम के एक हफ्ते के बाद, इसने पेज टेबल में हजारों प्रविष्टियाँ एकत्र कीं, आकार में प्रत्येक 32kb।

मेरे पृष्ठ की तालिका का आकार 1 जीबी था, एक रिबूट के बाद, यह केवल 50 एमबी है।

यहां छवि विवरण दर्ज करें

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