Windows Server Initial Setup시 반드시 진행하는 설정중에 하나인, Windows 프로세서 & 메모리 사용계획을 Registry값을 이용해 수정하는 방법에 대해 알아보고자 한다.

 

[내컴퓨터 → 속성 → 고급 → Performance → Setting] 부분에서 해당 Option을 수정 가능

 

이후 Performance Option에서 "프로세서 사용계획" 및 "Memory Usage" 및 Virtual Memory 값을 대부분 Windows Setup

시설정하는데 이 값이 있는 Registry 값을 수정하여, 자동화 한다면 좋은 방법이라 생각이 된다.

 

 

[프로세서 사용계획, Processor scheduling]

어떠한 환경의 Service를 제공하느냐에 따라 Programs을 선택하기도 하고 Backgroupd Services를 선택하기도 한다.
대부분의 서버 환경은 Default로 Background Services로 설정하지만. Terminal 환경이나, Excel과 같은 사용자 Action이
많은 서비스의 경우에는 Program으로 설정하는것이 일반적이며, SQL Services등을 제공할때는 Background Services를
권고한다. 해당 Option을 조절하는 Registry 값의 위치는 다음과 같다.

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl\Win32PrioritySeparation]

Data 형식 : REG_DWORD

값 : Hexadecimal 26 (Program), Hexademical 18 (Background Serivces)

image

 

[Memory Usage]

메모리 사용계획도 Setting 환경에 따라 변할 수 있으며, 대표적으로 권고하는 파일서버의 경우에는 System Cache 사용을
권고하며, 해당 Registry 값에는 Paging File 위치또한 지정할 수 있다.

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache]

Data 형식 : REG_DWORD

값 : Hexadecimal 0 (Program), Hexademical 1 (System Cache)

 

image

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by hotpoto

메모리 영역 중 Non Paged Pool 영역에 Full 현상이 나면 서버는 어떠한 현상이 될까?? 그 대답은 간단하다. 바로 서버 HANG상태로 진입하게 되어 더이상 Resource를 이용할 수 없게 된다. Non Paged Pool 영역은 대한 내용은 아래의 Link에서 확인하면 감사...^^

Windows Memory Option, 메모리 튜닝 기초, 장애 관리 Point

서버가 HANG 상태가 될경우 취하는 Action Plan은 크게 2가지로 정리할 수 있다. 한가지 방법은 풀릴때까지 그냥 놔둘경우....(ㅋㅋ), 수동 Dump를 수집하여 근본원인 분석을 하는 아주 지극히 정상적인 Admin의 Plan.....(ㅋㅋ)

그냥 놔둘경우는 너무 무책임하다는 오명(?)을 들을 수 있기 때문에 여기서는 Dump 생성 후 추정원인을 생각해 볼수 있는 Tip을 설명하고자 한다.

먼저 Non Paged Pool영역을 감지하는 방법은 Windows Server에서 기본적으로 제공하는 Warning을 이용하는 방법이다.

image

위와 같이 Counter Log를 이용하여 임계치를 설정해놓고 위에 TAB의 작업을 이용하여 Event를 이벤트뷰어에 기록해서 Check하거나 프로그램 실행 Script를 통해 Admin에게 알려서 사전에 미리 감지할 수 있는 방법을 사전에 마련해 놓는다.

위와 같은 경고 메세지가 발생하였을 경우 필자는 모니터링 Tool에 다음과 같이 나오도록 설정하였다.  설정방법은 모니터링 Tool마다 약간 다름으로 그 설명보다는 Script를 이용해 아래와 같이 설정을 해놓는것도 하나의 방법이다. 좀더 강력한 방법은 문자발송을 통해 확인하는 방법이 더 강력하지 않을까?????^^

image

다시 돌아가서 서버에 접속이 가능하다면 WAS등의 Process를 재기동하여 Non Paged Pool영역을 낮출수도 있고 걍 서버를 리부팅 하는 방밥도 있다. 여기서 말하는 것은 서버 리부팅은 수동 Dump 생성을 위한 리부팅을 말한다.

리부팅 이후에 Dump 분석하는 방법에 대해 살짝 공유하면...

image

위에서 보면 Non Paged Pool MAX값과 Usage값이 거의 일치하는것을 볼수 있다... 그럼 Full 는 말...ㅋㅋ 이건 큰 의미가 없는것이 Non Paged Pool 영역을 감지하는 모니터링을 실시 했으니까... 또 그런이유로 Dump를 떨군 것이니 당연한 결과가 아닌가...ㅎㅎ

그럼 도대체 어떠한 넘들이 Non Paged Pool 영역을 사용했는지... Pool영역을 들여다 보자

 image

흠... Gsem이란 분이 거의다 사용을 하셔서 문제가 되었군요... Gsem은 Gdi Semaphores말하는 것이라고 친절하게 설명이 되어 있다...ㅡㅡ; 이 다음의 자세한 내용은 MS 엔지니어에게 질문...ㅋㅋ

이후 Locking Session을 확인하여 어떠한 Process가 Non Paged를 유발했는지 확인해볼 필요가 있다.

image

일단 확인할 수 있는 부분은 여기까지로 제한한다. 아직은 Skill이 부족하여 이 이후의 단계는 좀더 내공이 필요할 듯 싶다.

여튼... 이러한 방법으로 사전 감지나 1차 처리를 한다면... 도움이 되지 않을까...??ㅋㅋ

부끄럽기에... 급하게 마무리 하겠다..

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by hotpoto

Windows 튜닝에 대한 글을 정리하다가 Memory구조에 대해 알 필요가 있다는 생각이 마구마구 든다. 그러나 Windows Internals에 있는 Memory관련 내용들~~ 특히 7장에 대한 내용을 다루어 볼려고 한다.

● PTE (Page-Table-Entries)

PTE는 Memory Manager에서 관리하는 일종의 Object로 VAD에 있는 Mapping정보를 읽어와서 Physical Memory 주소와 Mapping하는 역활을 담당한다. 이 공간은 32Bit체에서 약 1.2GB정도 차지한다. 계산법은 Page 용량이 4KB이니까 MAX 300,000으로 유지 되기 때문에 1.2GB라는 계산이 나오는 것이다. 4G Memory일 경우 3500정도는 유지해야 한다고 하는데 정확한 수치는 어떠한 서비스를 하는 것인지에 따라 다르다고 한다.

● PAE (Physical Address Extension)

이 Option은 32bit System에서 Memory 4G 이상의 메모리를 인식할 수 있게 해주는 옵션이다. 이 옵션에 대해서는 튜닝 두번째 내용에서 다루었기 때문에 여기서는 Windows에서 동작하는 MMU(Memory Management Unit) 의 동작 원리에 대해 알아보고자 한다.

 

      /PAE

/NOPAE

이번 Topic에서는 글보다는 그림이 많은거 같다...ㅋ 여담이고 /PAE Option을 적용하면 부팅시 Ntkrnlpa.exe(Uniprocessor), Ntkrpamp.exe (Multi)라 불리는 Kernel이 Load되어 윗 그림과 같은 구조로 Vitrual Address Mapping 방식이 바뀌게 된다. 즉 /PAE Option이 적용될때는 3분할 방식으로 Vitrual Address영역에 접근하게 되는 것이고 PAE Option이 적용되지 않을 때는 2분할 방식을 이용하게 되는 것이다. /PAE Option을 적용하더라도 Registry Flags 값이나, Non Paged Pool Size, "Well-Known" kernel Address는 변하지 않는다고 한다. /PAE Option이 적용될 경우 다음과 같은 Mechanism으로 인해 Virtual Address에서 Physical Memory 값으로 찾아가게 된다.

1. CR3(Control Registor 3 - 2bit 처리를 하는 레지스터)가 PDPI로 요청을 함

2. 요청된 Index를 PDPE로 검색하여 PDE로 전송

3. PDE내에서 PFN의 Index를 이용하여 PTE에 Mapping한 후 Physical Memory Space에 Mapping

이러한 로직 처리로 Virtual Memory 처리를 한다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by hotpoto
TAG memory, pae, pde, pte

튜닝 두번째 시간으로 이번에는 메모리 구조에 대해 살펴보도록 하겠다. 메모리 튜닝을 알려면 적어도 Windows 메모리 구조에 대하며 미리 알아야 하는데... 또 Memory 구조를 이해하기 위해서는 먼저 Windows Architecture를 이해하는것이 선행작업(?)으로 이루어 져야 할 것이다. 고로... Windows Architecture에 대하여 언제나 그랬듯이 간단히 짚고 넘어가도록 하겠다.

image

위의 그림은 지금 스터디 하고 있는 Windows Internals에서 빌려온 그림이다.^^ 쓰면서 설명하면 무지 편하지만 지면상으로 표현해야 하는 한계가 있으므로 쭉 서술하겠다. 꼭 이그림을 외운다기 보다는 전체적인 흐름을 파악하는 것이 중요하다. Windows는 크게 User Mode와 Kernel Mode로 구성되어 있다. 먼저User Mode는 크게 System Process 부분과 Services, Application, Enviroment Subsystem으로 구성되어 있다. Kernal Mode는 HAL, Kernel, I/O, Memory Manager와 같은 구조로 이루어져 있다. 왜 이러한 구조를 설명하려는 것일까? 위에 설명된 일종의 Image들이 바로 Memory에 상주되어 Windows System을 움직이기 때문이다. 즉 Windows에서 말하는 메모리 구조도 User 모드에서 사용하는 영역과 Kernel Mode에서 사용하는 부분으로 나눌 수 있다. 위에서는 간단히 메모리 설명을 하려고 정의한 부분이였고 지금부터가 Windows 튜닝 메모리 시간으로 접어드는 아주 중요한 시기이다!!! 자 Gogo~~

● Memory 용어 정리

Memory에 관련된 용어 정리를 하려고 하는데... 나는 Windows Internals을 보는 순간 한숨이 나온다. 어떻게 이렇게 많은 양의 내용을 이해해야 하며, 내가 과연 이 내용으로 발표를 할 수 있을까 하는 내용이다. 그러나 언제나 그랬듯이 필자는 간단히 Memory 용어 정리를 넘어가려고 한다..ㅋ

image

Application에서 VAD를 거쳐(그림에 표시되지는 않았지만 VAD는 가상의 메모리 공간으로 Physical Memory값을 찾을 수 있는 주소값을 가지고 있다) Physical Memory로 Data를 찾으려고 한다. 이 경우 Physical Memory에 원하는 Data가 있는 경우를 우리는 "Memory Hit"되었다고 말한다. 만약 원하는 Data가 없는 경우에는 Virtual Memory Cache에 Access하고 없을 경우 Virtual Memory(Disk공간에 있는 것)을 Scan하게 되는데 이 과정을 "Page Fault"라고 한다. 즉 Page Fault는 Virtual Memory를 이용하는 것이라고 생각하면 좋을 듯 하다. 이럴 경우는 상식적으로 생각해보면 좀 더 기억하기가 쉬울 것이다. Physical Memory가 작거나, Virtual Memory가 클 경우 Page Fault는 좀더 자주 발생할 것이다. Page Fault과정중에서 2가지 중요한 개념이 나오는데 이는 "Paged Pool"과 "Non Paged Pool"이라는 개념이다. 그림에서 설명한다면 Paged Pool은 Virtual Memory를 통해 Access하는것을 말하고 Non Paged Pool은 Virtual Memory Cache영역까지 Access하는것을 말한다. 필자가 너무 쉽게 설명한듯 하여 좀더 업무에 효율적으로 쓸 수 있는 문장으로 위 2개의 개념을 바꾸어 보았다. "Paged Pool"영역은 크게 2 부분으로 나눌수 있는데 Kernel 쪽에서 사용하는 부분(특정 API함수들이 호출에서 Kernel영역의 App사용)과 Disk Paging이 이루어 지는 공간으로 구성되어 있다. "Non Paged Pool"영역은 System Booting시에 메모리에 로드되어 Shutdown시까지 메모리에 상주되어 있는 공간을 의미한다. 그림에서 보면 Virtual Memory Cache영역까지만 접근하는 것을 말하는 것이다.

이러한 개념들을 배우는 이유는 바로 Memory 튜닝시 반드시 알아두어야 할 용어이기 때문이다. 만약 System 운영 시 Page Fault Count가 Web Server일 경우 150 ~ 200, 일반 Application Server 일 경우 80 ~ 100정도가 되었을때는 Memory가 부족하다고 판단할 때 이용된다. 또 Windows 서버 운영시 Paged Pool영역의 문제로 Event가 발생하였다면 2019로 표시되며, Non Paged Pool영역의 문제가 일어났다면 Event ID는 2022로 표시 될 것이다. 또 Non Paged Pool 영역이 Full 이 된다면 System은 HANG상태가 되어 장애를 유발할 수 있기 때문에 이러한 임계치를 인지하고 있는 것은 시스템 튜닝의 기초내용이라 생각된다.

image

휴~~ 생각나는 데로 쓰다 보니 용어 정리하고 해놓구선.... 중요 단어만 열거한거 같다. 非중요단어에 대해서는 개념만 집고 넘어가도록 하겠다. Virtual Memory의 도입 배경은 예를들어 설명하겠다. 만약 Windows상에 Icon을 눌러 실행파일을 실행할 경우 일단 Disk에서 Memory로 실행파일의 Image를 올려야 한다. 그러나 만약 올릴수 있는 Memory 단위가 1M라는 제약조건이 있다고 가정하자. 실행파일의 Image가 2M라고 하면 이 파일을 실행 될 수 없을 것이다. 그래서 나온 개념이 Virtual Memory라는 개념이라고 한다. Paging은 Swap이라고도 하는데 Unix에서 Swap이라는 개념이 NT에서는 Paging이란 개념으로 불리는거 같다. 즉 프로그램 중 자주 사용되지 않는 부분의 작업 메모리를 물리적 Memory에서 Disk로 옮기는 방식, 즉 Memory의 가용공간을 증가시키는 방법중 하나이다.

● Memory 관련 Option

   ▶ PAE (Physical Address Extention)

Windows 32 Bit System일 경우에는 OS상에서 인식 할 수 있는 Memory의 용량이 4G로 제한된다. 일반 Application 서버나 Web Server일 경우에는 이러한 운영이 가능하겠지만 SQL서버나 File 서버를 운영할 경우 4G이상의 Memory를 사용하게 되는 경우가 빈번하다. 이럴경우 Boot.ini File에서 PAE Option을 활성화 해야만 확장된 Memory 사용을 할 수 있게 된다. /PAE Option에 대한 설명은 Windows Internal에 너무나 자세히 나와 있는데 여기서는 항상 강조하는 것이지만 간단히 살펴보고 Windows Internal 내용은 다시 다루도록 하겠다.

image

4G 이상일 경우 Boot.ini에 /PAE Option을 추가하면 위의 그림과 같이 메모리 영역 부분이 추가된다. 이렇게 추가 할당된 Memory영역은 바로 User 부분에서 사용할 수 있는것이 아니다. 확장된 영역은 Paging공간으로 사용된다. 추가된 부분을 User 부분에서 사용할 수 있으려면 /AWE (Address Windowing Extensions)사용해야 한다. Windows Internals에 나오는 /PAE와 /AWE부분은 3편에서 다루기로 하겠다.

● Memory 분석을 위한 Counter 설정

   1. Available MBytes

      - 모든 프로세스들에 의해  사용되고 남은 Memory를 확인하는 Counter로 시스템의 안정적 운영을 위해서는 Physical Memory양의 약 20~25%를 유지하는 것이 적절하다고 한다.

   2. Page Reads/sec or Paged Writes/sec

      - Physical Paging으로 인해 Disk로 초당 읽어 오는 수를 의미하는 것으로 Hard page와 Soft page로 구분이 된다. Hard page는 찾고자 하는 Data가 메모리에 없어 Disk으로 부터 fetch하는 것을 말하고 Soft page는 메모리에서 바로 가져오는 것을 말한다. 보통 이값이 150이 넘을 경우 Memory상에 Bottleneck이 있다고 판단한다.

   3. Pool Nonpaged Bytes / Pool Nonpaged Peak / Pool Nonpaged Failures

      - 앞의 내용을 보면 32Bit운영체제에서는 값이 약 265M정도로 할당이 되어 있는데, 이 값이 MAX가 될경우 Server의 Resource를 이용할 수 없게 된다.(Server Hang상태)

   4. % Usage Peak

      - Paging File이 주어진 시간내에 처리하는 %를 나타낸 값으로 이 값이 90%를 넘을 경우 Memory Bottleneck이 있다고 생각할 수 있다.

지금까지 메모리 튜닝에 필요한 기초 지식 및 성능 Counter에 대해 알아보았다. 시스템 튜닝은 어느 한 부분 보다는 종합적으로 접근해서 처리해야 하는 경우가 많기 때문에 앞으로 남은 Disk관련, PCI관련, 운영되고 있는 서비스 관련 Point에 대한 부분을 다루고 다시 이 부분을 다룰려고 한다. 2번째 시간을 마치면서 아쉬운 부분이 있기 때문에 2-1편의 의미로 Windows Internals 7장에 있는 Memory 부분을 언급하고 넘어가기로 하자.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by hotpoto

티스토리 툴바