Windows'ta Yüksek Disk belleği Olmayan Havuz Belleği Kullanımı (Sızıntı)


Windows bilgisayarları ve sunucuları, verilerini sistemin disk belleği olmayan bellek havuzunda depolayan belirli bir sistem sürücüsünün sızıntısından kaynaklanan bellek taşmasıyla ilgili sorunlar yaşayabilir. Disk belleği olmayan bellek havuzul, işletim sisteminin çekirdeği ve sürücüleri tarafından kullanılan bilgisayarın RAM'indeki verilerdir. Disk belleği olmayan havuz hiçbir zaman diske (disk belleği dosyasına) takas edilmez, her zaman yalnızca fiziksel bellekte depolanır.

Disk belleği olmayan belleğin mevcut boyutunu Görev Yöneticisi'ndeki Performans sekmesinin Bellek bölümünde görebilirsiniz. Aşağıdaki ekran görüntüsü, sunucunun belleğinin neredeyse tamamının meşgul olduğunu ve bunun büyük bir kısmının disk belleği olmayan 4.2GB havuzu tarafından kullanıldığını gösteriyor. Normalde, disk belleği olmayan havuzun boyutu nadiren 200-400 MB'ı aşar. Büyük bir disk belleği olmayan havuz boyutu, genellikle bazı sistem bileşenlerinde veya aygıt sürücülerinde bir bellek sızıntısı olduğunu gösterir.

Sunucudaki disk belleği olmayan havuzda bir bellek sızıntısı varsa, Sistem olay günlüğünde aşağıdaki olaylar görünecektir:

Olay Kimliği: 2019
Kaynak: Srv
Açıklama:

The server was unable to allocate from the system nonpaged pool because the pool was empty

Çoğu durumda, yukarıda açıklanan bellek sızıntısının nedeni, Windows'ta yüklü olan üçüncü taraf sürücülerle ilgili bazı sorunlardır. Kural olarak, bunlar ağ sürücüleridir. Lütfen büyük dosyaları indirirken havuz davranışına dikkat edin (büyük olasılıkla hızla büyür).

Windows'ta disk belleği olmayan maksimum havuz boyutu:

  • Windows x64 128 Gb'a kadar ve fiziksel belleğin %75'inden fazla değil

  • 2 Gb'ye kadar Windows x86 ve en fazla %75 RAM

Disk belleği olmayan havuzun temizlenmesine yalnızca Windows'un yeniden başlatılması yardımcı olur. Bir ev cihazı için kabul edilebilir olabilir, ancak 7/24 çalışan bir sunucu için daha iyi bir çözüm bulmalısınız.

Ağ Veri Kullanımı İzleme Sürücüsünü Devre Dışı Bırakın

Çoğu zaman, disk belleği olmayan havuzdaki bellek sızıntısının nedeni, ağ etkinliği izleme sürücüsünün (Ağ Veri Kullanımı — NDU,

%WinDir%\system32\drivers\Ndu.sys

) ağ bağdaştırıcısı sürücüleri ile. Çoğu zaman Killer Network ve MSI ağ kartı sürücüleri, NDU sürücüsüyle çakışır. Bu hizmet, Windows işlevselliğinde fazla bir kayıp olmadan devre dışı bırakılabilir.

NDU hizmetini şu komutla durdurun:

sc config NDU start= disabled

Veya kayıt defteri aracılığıyla:

  1. Kayıt Defteri Düzenleyicisini açın (regedit.exe);

  2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\ kayıt defteri anahtarına gidin;

  3. Başlat parametresinin değerini 4 olarak değiştirin.

Değişiklikleri yaptıktan sonra bilgisayarınızı yeniden başlatmanız gerekir.

Çekirdek Modu Bellek Sızıntısını Bulmak için PoolMon'u Kullanma

Disk belleği olmayan havuzda bellek sızıntısına neden olan sürücüyü belirlemeye çalışabilirsiniz. Bunu yapmak için Windows Sürücü Kiti'nde (WDK) bulunan Poolmoon.exe konsol aracına ihtiyacımız var. Microsoft'tan Windows sürümünüz için WDK'yı indirin ve kurun. Ardından Poolmon.exe'yi başlatın (Windows 10 için WDK olması durumunda, araç

C:\Program Files (x86)\Windows Kits\10\Tools\

dosya).

Aracı başlattıktan sonra P'ye basın. İkinci sütun, disk belleği olmayan bellek (Nonp özniteliği) kullanan işlemlerin etiketlerini görüntüler. Ardından, sürücü listesini Bayt sütununa göre sıralamak için B tuşuna basın.

Soldaki sütun, sürücü etiketlerini listeler. Göreviniz, bu etiketi kullanarak sürücü dosyasını belirlemektir. Örneğimizde, disk belleği olmayan havuzdaki RAM'in çoğunun Nr22, ConT ve smNp etiketlerine sahip sürücüler tarafından kullanıldığını görebilirsiniz. >.

Bulunan etiketler için sürücüleri kontrol etmelisiniz.

strings.exe

aracı (Sysinternals'tan), yerleşik

findstr

komutu veya PowerShell kullanarak.

Bulduğunuz etiketlerle ilişkili sürücü dosyalarını bulmak için aşağıdaki komutları kullanın:

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

Veya PowerShell'i de kullanabilirsiniz:

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

Etiketler için sürücü dosyalarını doğrudan poolmon.exe'de eşleyebilirsiniz. Bunu yapmak için pooltag.txt dosyasının araç dizininde olduğundan emin olun. pooltag.txt dosyasını WDK kurulum dizininden kopyalayabilir veya GitHub'dan indirebilirsiniz. Poolmon'u şu şekilde çalıştırın:

poolmon /g

Sürücü adının artık Mapped_driver sütununda görüntülendiğini unutmayın.

Bu nedenle, soruna neden olabilecek sürücü dosyalarının bir listesine sahibiz. Şimdi, bu dosyaların adlarıyla hangi sürücüleri ve sistem bileşenlerini ifade ettiğini belirlemelisiniz. Bunu yapmak için Sysinternals'ın sigcheck aracını kullanabilirsiniz.

sigcheck C:\Windows\System32\drivers\rdyboost.sys

Araç, sürücünün veya Windows bileşeninin adını, açıklamasını ve sürümünü döndürür.

Artık sorunlu sürücüyü veya hizmeti kaldırmayı/güncellemeyi/yeniden yüklemeyi deneyebilirsiniz.

Bir bellek sızıntısı bir BSOD ile sonuçlandıysa, sorunlu sürücüyü bir bellek dökümü dosyasında belirleyebilirsiniz.

  1. Windbg hata ayıklayıcısına bir bellek dökümü yükleyin;

  2. Komutu çalıştırın:

    !vm
  3. NonPagedPool Kullanımı değeri, NonPagedPool Max değerinden büyükse, disk belleği olmayan havuzun tükendiği anlamına gelir;

  4. Havuzun içeriğini şu komutla kontrol edin (sonuçlar disk belleği olmayan havuz kullanımına göre sıralanacaktır):

    !poolused 2
  5. Sürücü etiketini aldıktan sonra, kullanarak sürücü dosyasını bulun.

    findstr

    veya

    strings.exe

    yukarıda anlatıldığı gibi.

Ağ Adaptörü Sürücülerinin En Son Sürümlerini Kurun

Ağ bağdaştırıcılarınız için en son sürücü sürümlerini satıcının web sitesinden indirip yüklemeyi deneyin.

Windows'ta otomatik sürücü güncellemesi etkinleştirilmişse, yeni sürücüleri yükledikten sonra sorunların başlayıp başlamadığını kontrol edin. Önceki sürücü sürümüne geri dönmeyi deneyin ve sorunun devam edip etmediğine bakın. Sorun çözülmüşse, otomatik sürücü güncellemesini devre dışı bırakın.

Hyper-V Rolünü Devre Dışı Bırakın

Bazı durumlarda, kurulu Hyper-V rolü, disk belleği olmayan havuzda bellek sızıntısına neden oluyor. Bu role ihtiyacınız yoksa devre dışı bırakmanızı öneririz.

Windows Server'da Hyper-V rolünü PowerShell komutuyla devre dışı bırakabilirsiniz:

Remove-WindowsFeature -Name Hyper-V

Windows 10 için komut:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

Aramanız herhangi bir sonuç döndürmezse, bellek sızıntısının bir kullanıcı modu işleminden kaynaklanıp kaynaklanmadığını kontrol edin. Görev Yöneticisi'ni açın, Ayrıntılar sekmesine gidin, NP Havuzu sütununu ekleyin ve disk belleği olmayan havuzda büyük bellek boyutuna sahip işlemleri arayın.

Bu kılavuz hem Windows Server 2019/2016/2012R hem de masaüstü Windows 10/8.1 için geçerlidir.

İlgili makaleler