Paged Pool, Non Paged Pool 확인 및 조치

Estimated reading: 2 minutes 14 views

Paged Pool, Non Paged Pool 확인 및 조치

1. NonPaged/Paged Pool 부족 시 현상

 서버가 Hang이 걸리거나 클라이언트와의 네트워크 연결이 끊어지고 다음과 같은 이벤트 로그가 발생 한다.

    → Paged Pool 부족 시 시스템 이벤트 2020오류 발생

    → NonPaged Pool 부족 시 시스템 이벤트 2019오류 발생

2. OS별 NonPaged/Paged Pool 크기

   2.1 NonPaged Pool Limits

OS32-bit64-bit
XP, Server 2003up to 1.2GB RAM: 32-256 MB > 1.2GB RAM: 256MBmin( ~400K/MB of RAM, 128GB)
Vista, Server 2008, Windows 7, Server 2008 R2min( ~75% of RAM, 2GB)min(~75% of RAM, 128GB)

   2.2 Paged Pool Limits

OS32-bit64-bit
XP, Server 2003XP: up to 491MB Server 2003: up to 650MBmin( 4 * nonpaged pool limit, 128GB)
Vista, Server 2008, Windows 7, Server 2008 R2min( system commit limit, 2GB)min( system commit limit, 128GB)

3. OS별 NonPaged/Paged Pool 크기 확인 방법

  3.1 Tool 설치

    시스템에 Process ExplorerDebugging Tools for Windows (Windbg) 설치

  → ProcessExplorer.zip 압축 해제 후 procexp.exe 실행

  → O/S (32bit or 64bit)에 맞는 32bit 또는 64bit Windbg 설치 (Windows 2008 R2의 경우 64bit)

  3.2 Process Explorer 설정

    → Process Explorer 실행 후 Option-Configure Symbols 설정

    → Debugging Tools가 설치된 경로로 Dbghelp.dll path 지정 및 Symbols path 지정

        Symbols path : srv*c:\symbols*http://msdl.microsoft.com/download/symbols 

 

  3.3 현재 사용 중인 NonPaged Pool 용량과 최대 NonPaged Pool 용량 확인

     → Process Explorer에서 ‘Ctrl+I’ 로 System Information 실행 후 Memory 탭 클릭

4. 커널 모드 메모리 누수 문제를 해결 방법 (Poolmon.exe 활용)

  4.1 먼저 태그 모드 설정

  PoolMon을 실행하기 전에 Pool tag를 설정한 다음 컴퓨터를 다시 시작. 풀 태그 기능은 메모리 할당의 태그 값에 따라 정렬된 풀 메모리에 대한 통계를 수집하고 계산한다.

  참고 : Windows Server 2003에서는 풀 태그 기능이 기본적으로 설정되므로 따로 설정 필요 없음

       Windows NT 4.0, Windows 2000 또는 Windows XP 기반 컴퓨터에서는 풀 태그 기능을 설정 필요

4.1.1 레지스트리 편집 이용 아래 값을 변경

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager

  GlobalFlag의 기존 값을 메모해두고 10진수 값인 ‘1024’로 변경 → 컴퓨터를 재시작

   ※ 디버깅이 완료되면 GlobalFlag 값을 다시 원래 값으로 복원한다

또는

4.1.2 Gflags.exe 유틸리티 사용

  글로벌 플래그 편집기(Gflags.exe) 유틸리티를 사용하여 풀 태그 기능을 설정할 수도 있음

  Gflags.exe는 Windows NT 4.0 Resource Kit 및 Windows 2000, Windows XP, Windows Server 2003 CD-ROM의 \Support\Tools 폴더에서 사용 가능.

  참고 : Windows Server 2003에서는 풀 태그 기능이 영구적으로 설정되어 있음.

    Gflags.exe를 사용하여 변경하려면 다음 단계를 수행

   가) 시작, 실행을 차례로 누르고 gflags.exe를 실행

   나) Enable Pool Tagging을 선택

   다) Apply를 누른 다음 OK 클릭

   라)컴퓨터를 다시 시작

   마) 디버깅이 완료되면 위의 단계를 반복하여 풀 태그 기능을 해제

 4.2 Poolmon을 사용하여 정보 수집

    PoolMon은 명령 창 내에 Pool tag 정보를 표시한다. 도구에서 반환된 모든 태그 정보를 표시하려면 화살표 키나 PAGE UP 및 PAGE DOWN 키를 사용

    Poolmon.exe는 Windows NT 4.0 Resource Kit 및 Windows 2000, Windows XP, Windows Server 2003 CD-ROM의 \Support\Tools 폴더에서 사용 가능.

       예) Poolmon.exe /p /b 실행 모습 (사용 중인 메모리 크기별, Non-paged/paged pool 별로 정렬)

    Poolmon.exe 출력 관련 명령어

    P – 태그 목록을 페이징, 비페이징 또는 혼합 순으로 정렬합니다. P 키를 누르면 각 옵션이 순환됩니다.

    B – 최대 바이트 사용 순으로 태그를 정렬합니다.

    M – 최대 바이트 할당 순으로 태그를 정렬합니다.

    T – 영문 태그 이름 순으로 태그를 정렬합니다.

    E – 페이징, 비페이징 합계를 맨 아래에 표시합니다. 순환합니다.

    A – 할당 크기 순으로 태그를 정렬합니다.

    F – “frees” 순으로 태그를 정렬합니다.

    S – allocs와 frees의 차이 순으로 태그를 정렬합니다.

    E – 페이징, 비페이징 합계를 맨 아래에 표시합니다. 순환합니다.

    Q – 종료합니다.

    자세한 내용은 아래의 Microsoft 기술 문서 참조

    출처 : http://support.microsoft.com/kb/177415

 4.3 해당 Tag의 드라이버를 확인 (pooltag.txt 또는 strings.exe 명령어 활용)

4.3.1 pooltag.txt 파일 사용

 ‘Debugging Tools for Windows’가 설치된 폴더의 triage\pooltag.txt 파일을 참조하여 해당 tag가 가리키는 드라이버 확인

4.3.2 String Tools 사용

 Strings.exe를 다운 받고 C:\Windows\System32\Drivers 폴더에 복사한다

   그 다음 CMD 창을 열어 복사한 경로로 이동한다 (cd c:\Windows\System32\drivers)

 아래와 같이 해당 Tag명을 검색 하여 찾는다.

  c:\Windows\System32\drivers> strings * | findstr “태그명”

5. Paged Pool 메모리 설정 변경

 기본적으로 시스템이 총 페이지된 풀의 80%에 도달하면 메모리 관리자가 나서 할당되어 있는 페이지된 풀 메모리를 해제한다

 아래의 설정으로 메모리 해제 프로세스를 보다 일찍 시작하도록 (예: 총 페이지된 풀의 60%에 도달할 때 시작) 메모리 관리자를 조정하면

 사용량이 갑자기 증가할 때도 페이지된 풀 요구를 충족시킬 수 있으며 페이지된 풀 메모리가 부족해지는 문제를 방지할 수 있다

 레지스트리에서 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management 키를 찾아 새로운 DWORD 값 추가 한다

  값 이름: PoolUsageMaximum

  데이터 형식: REG_DWORD

  기수: 10진수

  값 데이터: 60 (값을 60으로 설정하면 기본 설정인 80%가 아니라 PagedPoolMax의 60%에서 메모리 해제 프로세스를 시작)

  값 이름: PagedPoolSize

  데이터 형식: REG_DWORD

  기수: 16진수

  값 데이터: 0xFFFFFFFF (PagedPoolSize를 0xFFFFFFFF로 설정하면 컴퓨터에 다른 리소스 대신 최대 페이지된 풀을 할당)

답글 남기기

Chat Icon Close Icon