Windows कंप्यूटर्स और सर्वर्स को सिस्टम के नॉन-पेज्ड मेमोरी पूल में अपना डेटा स्टोर करने वाले सिस्टम ड्राइवर के लीक के कारण मेमोरी ओवरफ्लो की समस्या का सामना करना पड़ सकता है। नॉन-पेज्ड मेमोरी पूल कंप्यूटर की RAM में डेटा होता है जिसका उपयोग ऑपरेटिंग सिस्टम के कर्नेल और ड्राइवर्स द्वारा किया जाता है। नॉन-पेज्ड पूल को कभी भी डिस्क पर स्वैप नहीं किया जाता (पेजिंग फाइल पर), यह हमेशा केवल फिजिकल मेमोरी में स्टोर होता है।
आप टास्क मैनेजर में परफॉरमेंस टैब के मेमोरी सेक्शन में नॉन-पेज्ड मेमोरी का वर्तमान आकार देख सकते हैं। नीचे दिए गए स्क्रीनशॉट में दिखाया गया है कि सर्वर की लगभग सारी मेमोरी व्यस्त है, और इसका अधिकांश भाग नॉन-पेज्ड पूल 4.2GB द्वारा लिया गया है। आमतौर पर, नॉन-पेज्ड पूल का आकार शायद ही कभी 200-400 MB से अधिक होता है। एक बड़ा नॉन-पेज्ड पूल आकार अक्सर इंगित करता है कि किसी सिस्टम कंपोनेंट या डिवाइस ड्राइवर में मेमोरी लीक है।

यदि सर्वर पर नॉन-पेज्ड पूल में मेमोरी लीक है, तो सिस्टम इवेंट लॉग में निम्न इवेंट्स दिखाई देंगे:
Event ID: 2019
Source: Srv
Description: The server was unable to allocate from the system nonpaged pool because the pool was empty
ज्यादातर मामलों में, उपरोक्त मेमोरी लीक का कारण Windows में इंस्टॉल थर्ड-पार्टी ड्राइवर्स के साथ कुछ समस्याएं हैं। नियम के रूप में, ये नेटवर्क ड्राइवर्स हैं। लार्ज फाइल्स डाउनलोड करते समय पूल व्यवहार पर ध्यान दें (सबसे अधिक संभावना है, यह तेजी से बढ़ता है)।
Windows पर अधिकतम नॉन-पेज्ड पूल आकार:
- Windows x64: 128 GB तक और फिजिकल मेमोरी के 75% से अधिक नहीं
- Windows x86: 2 GB तक और 75% RAM से अधिक नहीं
केवल Windows रीबूट नॉन-पेज्ड पूल को साफ करने में मदद करता है। यह होम डिवाइस के लिए स्वीकार्य हो सकता है, लेकिन 24/7 काम करने वाले सर्वर के लिए आपको बेहतर समाधान खोजना चाहिए।
नेटवर्क डेटा उपयोग मॉनिटरिंग ड्राइवर को डिसेबल करें
काफी अक्सर, नॉन-पेज्ड पूल में मेमोरी लीक का कारण नेटवर्क एक्टिविटी मॉनिटरिंग ड्राइवर (नेटवर्क डेटा उपयोग — NDU, %WinDir%\system32\drivers\Ndu.sys) का नेटवर्क एडाप्टर ड्राइवर्स के साथ असंगतता है। अक्सर Killer Network और MSI नेटवर्क कार्ड ड्राइवर्स NDU ड्राइवर के साथ संघर्ष करते हैं। इस सर्विस को Windows फंक्शनैलिटी के ज्यादा नुकसान के बिना डिसेबल किया जा सकता है।
निम्न कमांड से NDU सर्विस रोकें:
sc config NDU start= disabled

या रजिस्ट्री के माध्यम से:
- रजिस्ट्री एडिटर खोलें (regedit.exe);
- रजिस्ट्री कुंजी HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\ पर जाएं;
- Start पैरामीटर का मान 4 पर बदलें।

परिवर्तन करने के बाद, आपको अपने कंप्यूटर को रीस्टार्ट करना होगा।
कर्नेल-मोड मेमोरी लीक खोजने के लिए PoolMon का उपयोग करना
आप नॉन-पेज्ड पूल में मेमोरी लीक का कारण बने ड्राइवर की पहचान करने का प्रयास कर सकते हैं। इसके लिए, हमें Windows Driver Kit (WDK) में शामिल Poolmon.exe कंसोल टूल की आवश्यकता है। Microsoft से अपने Windows संस्करण के लिए WDK डाउनलोड और इंस्टॉल करें। फिर Poolmon.exe शुरू करें (Windows 10 के लिए WDK के मामले में, टूल C:\Program Files (x86)\Windows Kits\10\Tools\ फोल्डर में स्थित है)।
टूल शुरू करने के बाद, P दबाएं। दूसरी कॉलम उन प्रोसेसेज के टैग्स प्रदर्शित करेगी जो नॉन-पेज्ड मेमोरी का उपयोग करते हैं (Nonp एट्रिब्यूट)। फिर B कुंजी दबाकर ड्राइवर सूची को Bytes कॉलम द्वारा सॉर्ट करें।

बाएं कॉलम में ड्राइवर टैग्स सूचीबद्ध हैं। आपका कार्य इस टैग का उपयोग करके ड्राइवर फाइल की पहचान करना है। हमारे उदाहरण में, आप देख सकते हैं कि नॉन-पेज्ड पूल में अधिकांश RAM का उपयोग Nr22, ConT, और smNp टैग्स वाले ड्राइवर्स द्वारा किया जाता है।
आपको पाए गए टैग्स के लिए ड्राइवर्स की जांच strings.exe टूल (Sysinternals से), बिल्ट-इन findstr कमांड, या PowerShell का उपयोग करके करनी चाहिए।
आपके द्वारा पाए गए टैग्स से जुड़ी ड्राइवर फाइलें खोजने के लिए निम्न कमांड्स का उपयोग करें:
findstr /m /l /s Nr22 %Systemroot%\System32\drivers\*.sys
findstr /m /l /s ConT %Systemroot%\System32\drivers\*.sys
findstr /m /l /s smNp %Systemroot%\System32\drivers\*.sys
या, आप PowerShell का भी उपयोग कर सकते हैं:
Set-Location "C:\Windows\System32\drivers"
Select-String -Path *.sys -Pattern "Nr22" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Py28" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Ne40" -CaseSensitive | Select-Object FileName –Unique
आप poolmon.exe में ड्राइवर फाइल्स को टैग्स के लिए सीधे मैप कर सकते हैं। इसके लिए, सुनिश्चित करें कि टूल डायरेक्टरी में pooltag.txt फाइल है। आप pooltag.txt को WDK इंस्टॉलेशन डायरेक्टरी से कॉपी कर सकते हैं या GitHub से डाउनलोड कर सकते हैं। poolmon को निम्न प्रकार से चलाएं:
poolmon /g

ध्यान दें कि ड्राइवर नाम अब Mapped_driver कॉलम में प्रदर्शित होता है।
तो हमें उन ड्राइवर फाइल्स की सूची मिल गई है जो समस्या पैदा कर सकती हैं। अब आपको उनके नामों से पहचानना होगा कि ये फाइलें किन ड्राइवर्स और सिस्टम कंपोनेंट्स को संदर्भित करती हैं। इसके लिए, आप Sysinternals से sigcheck टूल का उपयोग कर सकते हैं।
sigcheck C:\Windows\System32\drivers\rdyboost.sys
टूल ड्राइवर या Windows कंपोनेंट का नाम, विवरण, और संस्करण लौटाता है।

अब आप समस्या ड्राइवर या सर्विस को अनइंस्टॉल/अपडेट/पुनः इंस्टॉल करने का प्रयास कर सकते हैं।
यदि मेमोरी लीक के परिणामस्वरूप BSOD हुआ, तो आप मेमोरी डंप फाइल में समस्याग्रस्त ड्राइवर की पहचान कर सकते हैं।
- मेमोरी डंप को Windbg डीबगर में लोड करें;
- कमांड चलाएं:
!vm - यदि NonPagedPool Usage मान NonPagedPool Max से अधिक है, तो इसका मतलब है कि नॉन-पेज्ड पूल समाप्त हो गया है;
- पूल की सामग्री को कमांड से जांचें (परिणाम नॉन-पेज्ड पूल उपयोग द्वारा सॉर्ट किए जाएंगे):
!poolused 2 - ड्राइवर टैग प्राप्त करने के बाद, ऊपर वर्णित अनुसार
findstrयाstrings.exeका उपयोग करके ड्राइवर फाइल खोजें।
नेटवर्क एडाप्टर ड्राइवर्स के नवीनतम संस्करण इंस्टॉल करें
अपने नेटवर्क एडाप्टर्स के लिए विक्रेता की वेबसाइट से नवीनतम ड्राइवर संस्करण डाउनलोड और इंस्टॉल करने का प्रयास करें।
यदि Windows में ऑटोमैटिक ड्राइवर अपडेट सक्षम है, तो जांचें कि क्या समस्या नए ड्राइवर्स इंस्टॉल करने के बाद शुरू हुई। पिछले ड्राइवर संस्करण पर वापस जाएं और देखें कि क्या समस्या बनी रहती है। यदि समस्या हल हो गई है, तो ऑटोमैटिक ड्राइवर अपडेट डिसेबल करें।
Hyper-V भूमिका डिसेबल करें
कुछ मामलों में, इंस्टॉल की गई Hyper-V भूमिका नॉन-पेज्ड पूल में मेमोरी लीक का कारण बनती है। यदि आपको इस भूमिका की आवश्यकता नहीं है, तो हम इसे डिसेबल करने की सलाह देते हैं।
Windows Server पर आप PowerShell कमांड से Hyper-V भूमिका डिसेबल कर सकते हैं:
Remove-WindowsFeature -Name Hyper-V
Windows 10 के लिए कमांड:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
यदि आपकी खोज कोई परिणाम नहीं देती है, तो जांचें कि क्या मेमोरी लीक यूज़र-मोड प्रोसेस के कारण हुई थी। टास्क मैनेजर खोलें, डिटेल्स टैब पर जाएं, NP Pool कॉलम जोड़ें और नॉन-पेज्ड पूल में बड़ी मेमोरी साइज़ वाले प्रोसेसेज देखें।

यह गाइड Windows Server 2019/2016/2012R और डेस्कटॉप Windows 10/8.1 दोनों के लिए लागू है।