रिसोर्स मॉनिटर और टास्क मैनेजर के कुल रैम का उपयोग कुल भौतिक मेमोरी उपयोग को दूरस्थ रूप से जोड़ने के लिए भी क्यों नहीं करता है? [डुप्लिकेट]


30

मैंने कई अलग-अलग अवसरों पर कई अलग-अलग विंडोज मशीन पर इस पर ध्यान दिया है: टास्क मैनेजर या रिसोर्स मॉनिटर द्वारा बताई गई रैम का उपयोग अक्सर ऐसी राशि में जुड़ता है जो उपयोग में वास्तविक राशि से काफी कम है।

उदाहरण के लिए, मेरे लैपटॉप या मेरे डेस्कटॉप पर कई बार, मैंने कुछ 7GB जैसे उपयोग में देखा है, और फिर भी कुल कार्य रैम सेट 3GB की तरह अधिक है। मैं अभी यह पता नहीं लगा सकता कि इसका उपयोग कहाँ किया जा रहा है!

एक सर्वर पर संसाधन मॉनिटर में आज मैंने देखा एक चरम उदाहरण है:

संसाधन निगरानी
पूर्ण आकार के लिए क्लिक करें

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

अब यहाँ कार्य प्रबंधक के प्रदर्शन टैब का एक स्क्रीनशॉट है:

कार्य प्रबंधक
पूर्ण आकार के लिए क्लिक करें

यह कहता है कि 7.6 जीबी की भौतिक मेमोरी उपयोग में है।

मैं यह हर समय व्यक्तिगत कंप्यूटर, लैपटॉप और अब सर्वर पर देखता हूं: सिस्टम टूल द्वारा रिपोर्ट किए गए कुल RAM उपयोग में केवल 1/4 रैम का उपयोग होता है जो मैं निरीक्षण करता हूं। डब्ल्यूटीएफ चल रहा है ???

क्या कोई संतोषजनक स्पष्टीकरण है कि मेरी सारी रैम कहाँ है? यह क्या कर रहा है, और यह कोई निशान क्यों छोड़ रहा है?

संपादित करें: यहाँ उपयोगकर्ता द्वारा पूछे जाने वाले चित्र के रूप में चित्रमय रैम उपयोग की एक तस्वीर है:

रामपुर उपयोग
पूर्ण आकार के लिए क्लिक करें

EDIT 2: जेम्स की प्रतिक्रिया के जवाब में, यहां गैर-पंजीकृत प्रक्रियाओं की एक तस्वीर है poolmon.exe, जो आकार द्वारा क्रमबद्ध हैं:

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

ये परिणाम मुझे भ्रमित करते हैं। poolmonसही ढंग से कहा गया है कि मेरे पास उपयोग में 6GB नॉनपेज़्ड पूल है, लेकिन सभी नॉनपेज़्ड पूल प्रक्रियाएँ आकार में 8MB से कम हैं।

इसका क्या मतलब हो सकता है? क्या poolmonनॉनपेज पूल का उपयोग करने वाली कुछ प्रक्रियाओं का पता लगाने में विफल है?



क्या आप कृपया अपने संसाधन मॉनिटर> मेमोरी टैब (सिर्फ रंगों और नंबरों के साथ नीचे का हिस्सा) की तस्वीर पोस्ट कर सकते हैं। यह अधिक बताना होगा।
व्हाट्स

2
@ रामहुड: मुझे उस लिंक पर इंगित करने के लिए धन्यवाद! दुर्भाग्य से, जैसा कि सिर्फ अनुरोध किया गया है, मैंने रिसोर्स मॉनिटर के फिजिकल मेमोरी ग्राफिकल मैप की एक तस्वीर अपलोड की है, और फिजिकल मेमोरी का स्टैंडबाय भाग कुल रैम उपयोग के 2% से कम है। डेविड शवार्ट्ज के जवाब से पता चलता है कि "छिपी हुई" रैम का उपयोग स्टैंडबाय रैम (यानी, कैश्ड डेटा के लिए उपयोग की जाने वाली रैम और उपयोग में नहीं आने वाले कोड) से होता है, और यहां ऐसा नहीं है। जैसे, मुझे नहीं लगता कि डेविड का जवाब बताता है कि क्या चल रहा है।
डम्पस्टरडॉफस

प्रोग्राम का उपयोग करें रामपुत, और इसके साथ और अधिक अन्वेषण करें। लेकिन वास्तव में यह स्टैंडबाय (कैश) नहीं है। क्या आप कोई विशेष प्रोग्राम चलाते हैं जो राम को ठीक करने के लिए, या जो कंप्यूटर को गति देने के लिए मान लें? कोई भी विषम ड्राइवर आइटम जो आपके कंप्यूटर के लिए विशेष होगा?
साइकोगेकेक

2
"पहले उत्तर दिया गया" लिंक इस मामले को कवर नहीं करता है।
जेमी हनरहान

जवाबों:


30

मुझे क्षमा करें, मुझे पता है कि यह एक शानदार प्रतिक्रिया की तरह लगता है ... लेकिन आपके शीर्षक में प्रश्न का उत्तर "है क्योंकि वे करने वाले नहीं हैं।"

या इसे अधिक विनम्रता से रखने के लिए: रैम का बहुत उपयोग होता है जो प्रक्रियाओं के निजी कामकाजी सेट में नहीं है। इसमें से कुछ प्रक्रियाओं के साझा कामकाजी सेटों में है - लेकिन आपको साझा करने के कारण वहां वास्तविक उपयोग की विश्वसनीय धारणा नहीं मिल सकती है; प्रक्रियाओं की संख्याओं को जोड़ने से आपको बहुत बड़ा परिणाम मिलेगा।

अन्य सामान जो रैम पर कब्जा कर लेता है, जैसे कि नॉनपेजेड पूल, पेजेड पूल का निवासी भाग, और अन्य कर्नेल-स्पेस उपयोग के निवासी हिस्से, टास्क मैनेजर के "प्रोसेस" डिस्प्ले में बिल्कुल भी दिखाई नहीं देते हैं।

अपने विशिष्ट मुद्दे के बारे में:

टास्क मैनेजर डिस्प्ले पर, "कर्नेल मेमोरी" अनुभाग देखें? आपके पास 6 जीबी "नॉनपेड मेमोरी" (यह नॉनपेजेड पूल है)। यह आपके दूसरे ग्राफ में "इन यूज़" सेक्शन का हिस्सा है। अप्रबंधित पूल को किसी भी प्रक्रिया के लिए चार्ज नहीं किया जाता है, यही वजह है कि कार्य प्रबंधक में प्रति-प्रक्रिया संख्याओं को जोड़ने से उपयोग में कुल के करीब नहीं मिलता है। कुछ ड्राइवर इसका उपयोग करने की सबसे अधिक संभावना है। यह पूरी तरह से अत्यधिक राशि है; यह 1 जीबी से कम होना चाहिए। जो भी चालक अप्रयुक्त पूल उपयोग के अत्यधिक भाग के लिए जिम्मेदार है वह निर्विवाद रूप से छोटी गाड़ी है।

RAMmap इसकी पुष्टि कर सकता है (इसके "यूज़ काउंट्स" टैब पर, "नॉनपेजेड पूल" के लिए कुल देखें) लेकिन यह आपको यह पता लगाने में मदद नहीं कर सकता है कि कौन सा ड्राइवर इसका कारण बन रहा है।

इसे खोजने का तरीका यहां बताया गया है: Microsoft उपकरण "पूलमन" की एक प्रति प्राप्त करें। यह एक चरित्र-मोड टूल (लड़का है, क्या यह कभी है) विंडोज ड्राइवर किट के साथ वितरित किया गया है। विंडोज 7 के लिए डब्ल्यूडीके एक मुफ्त डाउनलोड है । आपको पूरी चीज़ को डाउनलोड करना होगा (यह एक आईएसओ है) और इसे उसी से इंस्टॉल करना है, लेकिन आप केवल उपकरण स्थापित करना चुन सकते हैं, यदि आप चाहते हैं।

डब्लूडीके निर्देशिकाओं में पूलमोन को ढूंढें - सही एक, 32- या 64-बिट को चुनना सुनिश्चित करें - और इसे व्यवस्थापक कमांड प्रॉम्प्ट से चलाएं। आपको इस तरह एक डिस्प्ले मिलेगा:

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

अब, "p" कुंजी दबाएं (नहीं, मैं मजाक नहीं कर रहा हूं। यहां कोई मेनू नहीं है!) जब तक "टाइप" कॉलम केवल "नॉनवेज" दिखाता है। फिर "बी" (दो बार यदि आवश्यक हो) को बाइट्स कॉलम द्वारा अवरोही क्रम में प्रदर्शित करने के लिए दबाएं (जो कि पहले ही यहां नमूने में किया गया था)।

फिर सबसे ऊपरी पंक्ति के लिए "टैग" कॉलम देखें। यहाँ (जाहिर है कृत्रिम) मामले में दिखाया गया है कि यह "लीक" है। (यह सिस्टम एक ड्राइवर चला रहा है जिसे जानबूझकर इस समस्या का कारण बनने के लिए प्रेरित किया गया था- यह "नॉनपेज़्ड पूल" लीक कर रहा है।)

btw, हाइलाइट की गई लाइनें वे हैं जो इस पुरातन स्क्रीन पर पिछले अपडेट के बाद से बदल गई हैं।

अब उस स्ट्रिंग वाली .sys फ़ाइल के लिए c: \ Windows \ System32 \ ड्राइवर्स खोजें। इस मामले में आप इस तरह "लीक" की तलाश में होंगे:

c:\windows\system32> findstr /s Leak *.sys

फिर उस स्ट्रिंग और / या ड्राइवर नाम के संदर्भ के लिए वेब पर खोजें।

यहाँ लौटना और .sys फ़ाइल से पूरा नाम, निर्माता का नाम इत्यादि की रिपोर्ट करना भी उपयोगी होगा।

(मेरी शर्त यह है कि आपके द्वारा पाया जाने वाला टैग ECMC होगा, ड्राइवर intmsd.sys है, और यह ExpressCache या IntelliMemory नामक उत्पाद से जुड़ा हुआ है। मैं उस उत्पाद को "अनइंस्टॉल" करूंगा। समस्या को ठीक करने के लिए एक अद्यतन है, लेकिन यहां तक ​​कि निश्चित संस्करण के साथ मैंने इस उत्पाद द्वारा कभी भी सिस्टम के प्रदर्शन में सुधार नहीं देखा है; यह अनिवार्य रूप से कार्यक्षमता की नकल करता है जो पहले से ही विंडोज में है)।

यदि आप इसे इस तरह नहीं पा सकते हैं, तो अगला कदम "विंडोज प्रदर्शन टूलकिट" का उपयोग करना है। इस स्ट्रिंग के लिए इस मंच को खोजें, कैसे-कैसे के लिए Magicandre1981 द्वारा जवाब के साथ। उन उत्तरों को अनदेखा करें जो xperf का उल्लेख करते हैं - यह उपकरण का एक पुराना संस्करण है।

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


दूसरों की तुलना में आगे की जांच करने के लिए धन्यवाद! मैं poolmonआज का उपयोग करते हुए एक रिसाव के लिए चारों ओर प्रहार करूंगा , और यदि मेरे पास आपके उत्तर को समझने के लिए और अधिक बारीकी से पढ़ने की कोशिश करेगा, तो मैं इसे समझूंगा। क्या आप कह रहे हैं कि शायद कोई मेमोरी लीक है? यदि ऐसा है, तो यह पूरी तरह से प्रशंसनीय है, क्योंकि हम सॉफ्टवेयर पर काम कर रहे हैं जो कुछ भयानक मेमोरी लीक के लिए जाना जाता है।
डम्पस्टरडॉफस

@ डंपस्टरडॉफ़स: हाँ। कर्नेल मोड ड्राइवर में संभवतः मेमोरी रिसाव है। यह एक ऐप में मेमोरी लीक से अलग है।
जेमी हनरहान

इसलिए मैं अंत poolmon.exeमें प्रश्न में सर्वर पर चलने के लिए चारों ओर हो गया , और स्क्रीनशॉट को शामिल करने के लिए मेरे प्रश्न को संपादित किया। poolmonमेरे पास 6GB नॉनपेजेड पूल है (जैसा कि आपने मेरे टास्क मैनेजर स्क्रीनशॉट से बताया है), लेकिन जब मैं केवल "नॉनप" प्रक्रियाओं को देखता हूं और आकार के अनुसार क्रमबद्ध करता हूं, तो वे सभी छोटे होते हैं (सबसे बड़ा 8 एमबी है)। क्या आपके पास कोई विचार है कि poolmonगैर-पंजीकृत पूल उपयोग के थोक का पता क्यों नहीं लगाया जा रहा है?
डम्पस्टरडॉफस

2
आह ... यहाँ समस्या "उपयोग" शब्द में है। तो आपके पास 6 जीबी नॉनपेज़्ड पूल है, लेकिन ऐसा प्रतीत होता है कि इसका कुछ ही हिस्सा फिलहाल उपयोग में है। काश मुझे कुछ भी नहीं पता (टीएम नहीं, पूलमोन नहीं, रैममैप नहीं) दिखाता है कि वास्तव में पूल कितना उपयोग में है। मेरा अनुमान है कि एक समय में एक भारी पूल उपयोगकर्ता था, इसलिए इसे समायोजित करने के लिए पूल का विस्तार किया गया, और फिर भारी उपयोगकर्ता चला गया। पूल को जिस तरह से संभाला जाता है, उसके कारण एक बार आवंटित की गई रैम को मुक्त करना आसान नहीं होता है, जब तक कि आवंटन बड़े सन्निहित चांस में न हो। मैं एक नए सिस्टम स्टार्टअप के बाद इसे देखने का सुझाव दूंगा।
जेमी हनराहन

वहाँ सर्वर 2003 (के लिए समर्थन उपकरण में poolmon.exe उपलब्ध का एक संस्करण है serverfault.com/questions/84479/... ) - थोड़ा पुराना है, लेकिन यह एक मात्र 5.2MB डाउनलोड है, और अभी भी पर (कम से कम) सर्वर 2016 चलाता है।
mwfearnley
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.