2012.11.30 08:21
메모리 사용 경쟁
윈도우 NT 시스템에서는 메모리가 부족한 경우가
아닌데도 페이지 파일을
사용하는 사례도 있다. 특히 거대한 배열을 사용하는
데이터베이스 등의 프로그램을 사용할 때에는 페이징
파일이 필수적이다. 페이징은 프로세스간에 자원을
차지하기 위한 일종의 경쟁 신호로 보면
된다. 메모리의 경우를 예로
들면, 일정한 정도의 메모리
사용 경쟁까지는 하드웨어
적으로 흡수할 수
있다. 그런데, 장치 사이에서 메모리
사용 경쟁이 일어나는
것은 결국 각 스레드에서 단독으로 메모리
입출력을 시행하는 횟수가
많아지기 때문이다. 장치는 산술급수적으로
증가 할 때 스레드는 장치에 따라
증가하는 개수가 다르기
때문에 경우에 따라서는
메모리 입출력 병목이
기하급수적으로 증가하는 시점이
존재한다. 이 지점에서 시스템은
트래싱을 시작하게 된다. 메모리 관리자는 이 때 활성화된 시스템 영역이
트래싱이 되지 않도록 막아 주는 역할을 한다.
메모리 개체를 성능 모니터를 통해 살펴볼 때
모든 메모리 페이지
오류가 디스크 입출력에서
생성되지 않는다는 사실을
알아 두어야 한다. 오류는 소프트웨어적 오류와 하드웨어적인
오류의 두 가지 오류가 존재한다. 소프트웨어적인 오류는
디스크 입출력에서 발생하지
않고 하드웨어적인 오류는
주로 디스크 입출력에서
발생된다. 대표적인 소프트웨어적인 오류는 0 요구 오류(Demand Zero
Fault)와 트랜지션 오류이다. 0 요구 오류는 프로 세스에서 메모리 영역을 처음
사용하는 경우 메모리가 초기화되어 있지 않아서 발생된다.
하드웨어적 오류는 성능 모니터의 Memory: Pages/sec 개체를
참조하면 알 수 있다. 이 개체는 페이지
읽기와 페이지 쓰기
전송률을 알려 준다.
Memory: Pages Input/sec는 읽기 오류를 측정할 수 있으며
Memory: Pages Output/sec는 페이지 파일에
저장되는 페이지에 해당하는
정보를 제공한다.
Memory: Page Reads/sec 와 Memory: Page
Writes/sec는 페이지에 읽기와 쓰기
작업을 수행할 때
입출력 요청 수를 알려준다. 하나의 입출력 요청은
한 개 이상의 페이지 파일 입출력을 한번에 수행하도록 한다.
Memory: Page Reads/sec와 Memory: Page
Input/sec를 비교하면 한 번의 입출력 요청에 얼마나
많은 페이지가 읽어들여지는지
알 수 있다.
Memory: Page Write/sec와 Memory: Page
Output/sec를 비교하면 한 번의 입출력 요청에 얼마나
많은 페이지가 씌여지는지
측정할 수 있다.
윈도우 NT 성능 모니터에서는 시스템이 메모리
페이지를 트래싱하는 경우나
메모리 페이징에 과부하를
주는 경우를 알려
줄 수 있는 항목은 존재하지 않는다. 그러나 다음 항목들을 모두
조합하여 사용한다면 그러한
상황을 추정할 수
있다.
Memory: Page Faults/sec: 이 수치가 높으면 (저성능의 서버에서 200 정도 고성능의 서버에서
대략 600정도) 페이지 파일을 과도하게
사용하는 경우 또는 소프트웨어 오류나 하드웨어
오류가 발생된 상태이다.
Memory: Page/set: 이 수치가 높으면 (저성능의 서버에서는 60 이상, 고성능의 서버에서는 60 정도) 하드웨어 페이지 오류가
발생한 상태이다.
Memory: Available Bytes: 이 값이 4MB 혹은 그 이하라면 시스템은 메모리가 더
필요하다.
LogicalDisk: %Disk Time: 페이지 파일이 있는
하드디스크에서 50에서 60정도의 값을 보이는 것이 높다고 알려져
있다.
LogicalDisk: Queue Length: 이 값은 2 이상이면 높은
것이다.