উইন্ডোজ কম্পিউটার এবং সার্ভারগুলোতে সিস্টেম ড্রাইভারের মেমরি লিকের কারণে নন-পেজড মেমরি পুল ওভারফ্লো হতে পারে। নন-পেজড মেমরি পুল হল কম্পিউটারের RAM-এ থাকা ডেটা যা অপারেটিং সিস্টেমের কার্নেল এবং ড্রাইভার ব্যবহার করে। নন-পেজড পুল কখনও ডিস্কে (পেজিং ফাইলে) স্ব্যাপ হয় না, এটি সর্বদা ফিজিক্যাল মেমরিতে থাকে।
টাস্ক ম্যানেজারের Performance ট্যাবের Memory সেকশনে বর্তমান নন-পেজড মেমরির আকার দেখা যায়। নিচের স্ক্রিনশটে দেখা যাচ্ছে সার্ভারের প্রায় সारा মেমরি ব্যস্ত, এবং এর অধিকাংশ ৪.২ GB নন-পেজড পুল দখল করেছে। স্বাভাবিকভাবে নন-পেজড পুলের আকার ২০০-৪০০ MB-র বেশি হয় না। বড় নন-পেজড পুল আকার সাধারণত কোনো সিস্টেম কম্পোনেন্ট বা ডিভাইস ড্রাইভারে মেমরি লিক থাকার ইঙ্গিত দেয়।

সার্ভারে নন-পেজড পুলে মেমরি লিক থাকলে সিস্টেম ইভেন্ট লগে নিচের ইভেন্টগুলো দেখা যাবে:
Event ID: 2019
Source: Srv
Description: The server was unable to allocate from the system nonpaged pool because the pool was empty
বেশিরভাগ কেসে উপরের মেমরি লিকের কারণ হল উইন্ডোজে ইনস্টল করা থার্ড-পার্টি ড্রাইভারের সমস্যা। সাধারণত নেটওয়ার্ক ড্রাইভারই দোষী। বড় ফাইল ডাউনলোড করার সময় পুলের আচরণ লক্ষ্য করুন (সর্বোচ্চ সম্ভবনা দ্রুত বেড়ে যাবে)।
উইন্ডোজে সর্বোচ্চ নন-পেজড পুল আকার:
- Windows x64: ১২৮ GB পর্যন্ত এবং ফিজিক্যাল মেমরির ৭৫% পর্যন্ত
- Windows x86: ২ GB পর্যন্ত এবং ৭৫% RAM পর্যন্ত
শুধুমাত্র উইন্ডোজ রিবুট করলে নন-পেজড পুল ক্লিয়ার হয়। হোম ডিভাইসের জন্য এটি গ্রহণযোগ্য হতে পারে, কিন্তু ২৪/৭ চলে এমন সার্ভারের জন্য ভালো সমাধান খুঁজে বের করা উচিত।
Network Data Usage Monitoring Driver নিষ্ক্রিয় করা
খুবই সাধারণত, নন-পেজড পুলে মেমরি লিকের কারণ হল নেটওয়ার্ক এক্টিভিটি মনিটরিং ড্রাইভার (Network Data Usage — NDU, %WinDir%\system32\drivers\Ndu.sys) নেটওয়ার্ক অ্যাডাপ্টার ড্রাইভারদের সাথে ইনকম্প্যাটিবিলিটি। সবচেয়ে বেশি Killer Network এবং MSI নেটওয়ার্ক কার্ড ড্রাইভার NDU ড্রাইভারের সাথে কনফ্লিক্ট করে। এই সার্ভিসটি উইন্ডোজ ফাংশনালিটিতে বড় কোনো ক্ষতির বিনা ডিসেবল করা যায়।
NDU সার্ভিস বন্ধ করার কমান্ড:
sc config NDU start= disabled

অথবা রেজিস্ট্রি দিয়ে:
- রেজিস্ট্রি এডিটর (regedit.exe) খুলুন;
- রেজিস্ট্রি কী HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\-এ যান;
- Start প্যারামিটারের মান 4 করুন।

পরিবর্তন করার পর কম্পিউটার রিস্টার্ট করুন।
PoolMon ব্যবহার করে কার্নেল-মোড মেমরি লিক খুঁজে বের করা
আপনি নন-পেজড পুলে মেমরি লিক সৃষ্টিকারী ড্রাইভার চিহ্নিত করার চেষ্টা করতে পারেন। এর জন্য Windows Driver Kit (WDK)-তে অন্তর্ভুক্ত Poolmon.exe কনসোল টুলটি লাগবে। আপনার উইন্ডোজ ভার্সনের জন্য WDK মাইক্রোসফট থেকে ডাউনলোড ও ইনস্টল করুন। তারপর Poolmon.exe চালু করুন (WDK for Windows 10-এ টুলটি 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-এ সরাসরি ড্রাইভার ফাইল ট্যাগের সাথে ম্যাপ করা যায়। এর জন্য টুল ডিরেক্টরিতে pooltag.txt ফাইলটি থাকতে হবে। WDK ইনস্টলেশন ডিরেক্টরি থেকে pooltag.txt কপি করুন বা GitHub থেকে ডাউনলোড করুন। PoolMon 이렇게 চালান:
poolmon /g

লক্ষ্য করুন, ড্রাইভার নাম এখন Mapped_driver কলামে দেখাচ্ছে।
তাহলে আমরা সমস্যাযুক্ত ড্রাইভার ফাইলগুলোর তালিকা পেয়ে গেলাম। এখন তাদের নাম দিয়ে বের করতে হবে যে কোন ড্রাইভার এবং সিস্টেম কম্পোনেন্টগুলোকে রেফার করে। এর জন্য sigcheck টুল (Sysinternals) ব্যবহার করা যায়।
sigcheck C:\Windows\System32\drivers\rdyboost.sys
টুলটি ড্রাইভার বা উইন্ডোজ কম্পোনেন্টের নাম, বিবরণ, এবং ভার্সন রিটার্ন করবে।

এখন আপনি সমস্যা সৃষ্টিকারী ড্রাইভার বা সার্ভিস আনইনস্টল/আপডেট/রি-ইনস্টল করার চেষ্টা করতে পারেন।
যদি মেমরি লিকের কারণে BSOD হয়, তবে মেমরি ডাম্প ফাইল থেকে সমস্যা সৃষ্টিকারী ড্রাইভার চিহ্নিত করা যায়।
- Windbg ডিবাগারে মেমরি ডাম্প লোড করুন;
- কমান্ড চালান:
!vm - যদি NonPagedPool Usage মান NonPagedPool Max-এর চেয়ে বড় হয়, অর্থাৎ নন-পেজড পুল এক্সহস্টেড;
- পুলের কন্টেন্ট চেক করুন কমান্ড দিয়ে (ফলাফল নন-পেজড পুল ইউজেজ অনুযায়ী সর্টেড হবে):
!poolused 2 - ড্রাইভার ট্যাগ পাওয়ার পর উপরে বর্ণনা অনুযায়ী
findstrবাstrings.exeব্যবহার করে ড্রাইভার ফাইল খুঁজে বের করুন।
নেটওয়ার্ক অ্যাডাপ্টার ড্রাইভারের লেটেস্ট ভার্সন ইনস্টল করা
ভেন্ডরের ওয়েবসাইট থেকে আপনার নেটওয়ার্ক অ্যাডাপ্টারদের লেটেস্ট ড্রাইভার ভার্সন ডাউনলোড এবং ইনস্টল করার চেষ্টা করুন।
যদি উইন্ডোজে অটোমেটিক ড্রাইভার আপডেট সক্ষম থাকে, তবে চেক করুন সমস্যা নতুন ড্রাইভার ইনস্টলের পর শুরু হয়েছে কিনা। পুরানো ড্রাইভার ভার্সনে রোল ব্যাক করে দেখুন সমস্যা কি बरकरার থাকে। সমস্যা সমাধান হলে অটোমেটিক ড্রাইভার আপডেট ডিসেবল করুন।
Hyper-V রোল নিষ্ক্রিয় করা
কিছু কেসে, ইনস্টল করা Hyper-V রোল নন-পেজড পুলে মেমরি লিক সৃষ্টি করে। আপনার যদি এই রোল দরকার না হয়, তবে আমরা এটি ডিসেবল করার পরামর্শ দিচ্ছি।
উইন্ডোজ সার্ভারে Hyper-V রোল ডিসেবল করার PowerShell কমান্ড:
Remove-WindowsFeature -Name Hyper-V
উইন্ডোজ ১০-এ কমান্ড:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
যদি আপনার সার্চ কোনো ফলাফল না দেয়, তবে চেক করুন মেমরি লিক ইউজার-মোড প্রসেসের কারণে হয়েছে কিনা। টাস্ক ম্যানেজার খুলুন, Details ট্যাবে যান, NP Pool কলাম যোগ করুন এবং নন-পেজড পুলে বড় মেমরি আকারवाले প্রসেস খুঁজুন।

এই গাইড উইন্ডোজ সার্ভার ২০১৯/২০১৬/২০১২R এবং ডেস্কটপ উইন্ডোজ ১০/৮.১ উভয়েরই জন্য প্রযোজ্য।