Welcome to TechNet Blogs Sign in | Join | Help

Escape From The Troubles

한국 마이크로소프트 플랫폼팀 블로그
System Paged Pool 메모리 부족으로 인한 System Hang 증상

Paged Pool 메모리는 시스템의 제한된 리소스로 여러 커널 모드 프로그램에서 공유하여 사용하는 커널 리소스입니다. Paged Pool 메모리가 소진될 경우, 시스템의 행 증상이 발생하게 됩니다. Paged Pool 메모리의 소진 현상의 원인 분석 및 재발 방지책을 찾기 위해서는 특정 커널 모드 프로그램이 paged pool 메모리를 과도하게 사용하고 있지 않은지 또는 시스템의 paged pool 메모리 구성이 너무 작게 설정되어 있지 않은지 등을 복합적으로 점검해 볼 필요가 있습니다.

먼저, Paged Pool 메모리 부족 현상이 발생하면 시스템 이벤트 2020 오류가 발생하게 됩니다.

이벤트 ID: 2020
원본: Srv
설명: 풀이 비었으므로, 서버가 시스템의 페이징 풀에서 할당하지 못했습니다.

현재 소모된 paged pool 메모리는 성능 모니터 (Perfmon.exe)에서 메모리/Pool Paged Bytes 카운터를 통하여 확인할 수 있습니다.

Windows 행 메모리 덤프가 수집되었다면 현재 시스템의 paged pool 메모리의 최대값 및 소모량을 좀 더 정확히 확인할 수 있습니다.

kd> !vm 1

*** Virtual Memory Usage ***
      Physical Memory:     16270   (   65080 Kb)
      Page File: \??\E:\pagefile.sys
         Current:     98304Kb Free Space:     61044Kb
         Minimum:     98304Kb Maximum:       196608Kb
      Available Pages:      5543   (   22172 Kb)
      ResAvail Pages:       6759   (   27036 Kb)
      Locked IO Pages:       112   (     448 Kb)
      Free System PTEs:    45089   (  180356 Kb)
      Free NP PTEs:         5145   (   20580 Kb)
      Free Special NP:       336   (    1344 Kb)
      Modified Pages:        714   (    2856 Kb)
      NonPagedPool Usage:    877   (    3508 Kb)
      NonPagedPool Max:     6252   (   25008 Kb)
      PagedPool 0 Usage:     729   (    2916 Kb)
      PagedPool 1 Usage:     432   (    1728 Kb)
      PagedPool 2 Usage:     436   (    1744 Kb)
      PagedPool Usage:      1597   (    6388 Kb)
      PagedPool Maximum:   13312   (   53248 Kb)
      Shared Commit:        1097   (    4388 Kb)
      Special Pool:          229   (     916 Kb)
      Shared Process:       1956   (    7824 Kb)
      PagedPool Commit:     1597   (    6388 Kb)
      Driver Commit:         828   (    3312 Kb)
      Committed pages:     21949   (   87796 Kb)
      Commit limit:        36256   (  145024 Kb)

!poolused 4 명령을 통해서 Paged pool memory를 많이 소모한 순으로 Paged pool tag를 리스트할 수 있습니다.

!poolused 4

Paged pool memory를 많이 소모한pool tag를 확인한 후, 아래 findstr 명령을 통하여 해당 pool tag로부터 어떤 드라이버가 해당 pool tag를 사용하였는지 확인할 수 있습니다.

findstr /m /l tag *.sys

<예>

 

아래 표는 Windows Server 2003 (32-bit) 시스템의 대략적인 최대 kernel resource table 입니다.  3GB 옵션이 활성화되어 있는 경우, Paged pool 메모리의 최대값은 그렇지 않은 경우에 비해 50% 정도로 줄어듭니다. 3GB 옵션이 반드시 필요한 경우가 아니라면 시스템에서 3GB 옵션은 제거하는 것이 paged pool 메모리 고갈 현상을 막을 수 있습니다.


3GB 옵션을 사용하지 않았더라도 System PTE를 기본값 이상을 늘릴 경우, 상대적으로 paged pool 메모리의 최대치를 줄어들게 되고, paged pool 메모리의 고갈 이슈가 쉽게 발생할 수 있습니다. 시스템에 System PTE가 기본값 이상으로 설정되어 있는지는 아래 레지스트리 키의 SystemPages 값을 통하여 확인할 수 있습니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management

다른 접근 방법으로는 Free System PTE가 여유가 있는 시스템에서 paged pool 메모리의 고갈 현상이 발생한다면, 아래 KB의 내용을 참조하여 paged pool 메모리의 최대치를 더 늘려주는 방법을 고려해 볼 수 있습니다.

서버가 시스템의 페이지된 풀에서 메모리를 할당할 수 없다
http://support.microsoft.com/?id=312362  
 

Posted: Monday, June 15, 2009 9:04 AM by escapetrouble
Filed under:

Comments

No Comments

Anonymous comments are disabled
Page view tracker