Windows PC나 서버에서 특정 시스템 드라이버가 비페이징 메모리 풀에 데이터를 저장하면서 발생하는 메모리 누수로 인해, 사용 가능한 메모리가 고갈되는 문제가 발생할 수 있습니다.
비페이징 풀(Non-paged Pool)은 운영체제 커널과 드라이버가 사용하는 RAM 영역의 데이터를 말합니다. 이 영역은 디스크(페이지 파일)로 스왑되지 않고 항상 물리적 메모리에만 상주한다는 특징이 있습니다.
작업 관리자에서 비페이징 풀 크기 확인하기
현재 비페이징 풀의 크기는 작업 관리자(Task Manager)의 성능 탭 → 메모리 항목에서 확인할 수 있습니다. 아래 스크린샷에서는 서버 메모리 대부분이 사용 중이며, 그중 4.2GB가 비페이징 풀이 차지하고 있습니다.
일반적으로 비페이징 풀의 크기는 200~400MB를 넘는 경우가 드뭅니다. 비페이징 풀 크기가 비정상적으로 크다면, 시스템 구성 요소나 장치 드라이버 중 하나에서 메모리 누수가 발생하고 있을 가능성이 높습니다.

시스템 이벤트 로그에 나타나는 오류
서버의 비페이징 풀에서 메모리 누수가 발생하면 시스템 이벤트 로그에 다음과 같은 이벤트가 기록됩니다.
이벤트 ID: 2019
원본: Srv
설명: The server was unable to allocate from the system nonpaged pool because the pool was empty
주요 원인
대부분의 경우 이러한 메모리 누수는 Windows에 설치된 서드파티 드라이버의 문제에서 비롯됩니다. 특히 네트워크 드라이버가 흔한 원인입니다. 대용량 파일을 다운로드할 때 비페이징 풀의 크기가 급격히 증가하는지 살펴보세요.
Windows에서 비페이징 풀의 최대 크기는 다음과 같습니다.
- Windows x64: 최대 128GB, 물리적 메모리의 75% 이내
- Windows x86: 최대 2GB, 물리적 메모리(RAM)의 75% 이내
비페이징 풀을 정리하는 유일한 방법은 Windows 재부팅입니다. 가정용 장치라면 재부팅으로 충분할 수 있지만, 24시간 내내 가동해야 하는 서버라면 근본적인 해결책을 찾아야 합니다.
목차
- 네트워크 데이터 사용량 모니터링 드라이버(NDU) 비활성화
- PoolMon으로 커널 모드 메모리 누수 찾기
- 최신 네트워크 어댑터 드라이버 설치
- Hyper-V 역할 비활성화
네트워크 데이터 사용량 모니터링 드라이버(NDU) 비활성화
비페이징 풀 메모리 누수의 흔한 원인 중 하나는 네트워크 활동 모니터링 드라이버(Network Data Usage, 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 열 기준으로 정렬합니다.

왼쪽 열에는 드라이버 태그가 표시됩니다. 이 태그를 통해 해당 드라이버 파일을 찾아야 합니다. 예제 화면에서는 Nr22, ConT, smNp 태그를 가진 드라이버들이 비페이징 풀의 대부분을 차지하고 있는 것을 볼 수 있습니다.
발견된 태그에 해당하는 드라이버는 Sysinternals의 strings.exe 도구, 내장 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 파일이 있어야 하며, 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 풀(NP Pool) 열을 추가한 후, 비페이징 풀에서 많은 메모리를 차지하는 프로세스를 찾아보세요.

이 가이드는 Windows Server 2019/2016/2012R2와 데스크톱용 Windows 10/8.1 모두에 적용됩니다.