본문 바로가기

카테고리 없음

Windows 서버 튜닝 (Memory)

튜닝 두번째 시간으로 이번에는 메모리 구조에 대해 살펴보도록 하겠다. 메모리 튜닝을 알려면 적어도 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 부분을 언급하고 넘어가기로 하자.