https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md
window os, process 모니터링을 위해,
위 링크의 windows_process_private_bytes, windows_process_pool_bytes,windows_process_virtual_bytes 를 이해하기 위해 작성된 글 입니다.
OS의 요구 페이징과 프로세스 구동 시 메모리 할당에 대한 기본 지식이 있다고 가정합니다.
1. Virtual Memory Size
- 디스크로부터 페이지를 swapping 하는 방식을 통해 물리 메모리의 한계 이상으로 주소 공간을 가질 수 있다.
- windows_process_virtual_bytes 메트릭은 특정 프로세스가 사용하기로 예약된 가상 주소 공간의 크기를 의미한다.
- 이 공간이 크다고 해서 실제 해당 프로세스가 메모리를 많이 쓰는 것은 아니다.
2. Commit Memory Size
- 예약된 가상 주소 공간에서 실제로 사용하기 위해 할당받은 메모리 크기를 의미한다.
- 가상 메모리 관점에서 할당을 받는다는 것은, 해당 페이지가 실제로 쓰인다는 것을 의미하고 이를 위해 물리적인 프레임과 메핑 되어 있다는 것을 의미한다.
- 가상 메모리가 commit 된 상태라도 페이지 폴트가 발생할 수 있다.(실제 물리 메모리에 프레임이 없을 수 있다.)
- 하지만, 곧 사용될 영역이기 때문에 요구 페이징 기법으로 인한 스와핑이 발생해 물리 메모리에 해당 프레임이 올라올 것이다.
- 즉, windows_process_private_bytes는 실제 프로세스가 사용하기 위해 할당받은 가상 메모리 크기를 의미한다.
- 참고
3. Nonpaged pool
- 페이징 과정에서 필연적으로 페이지 폴트 발생으로 인한 스와핑이 발생한다.
- 즉, 페이지는 언제든지 디스크에 다녀올 수 있다.
- 그런데 이러한 스와핑이 너무 많이 발생하게 되면, 실제 로직을 수행하는 것보다 스와핑에 cpu 시간을 더 소비하게 될 우려가 있다.
- 이를 방지하기 위해 스와핑이 어떤 상황에도 발생하지 않는 메모리 영역을 지정해 두었는데, 그것이 nonpaged pool이다.
- nonpaged pool 메모리 공간을 프로세스가 할당받게 되면 해당 영역은 항상 메모리에 상주해 있기 때문에 페이지 폴트가 발생하지 않고 스와핑도 발생하지 않는다.
- nonpaged pool은 물리 메모리 수준의 개념이다.
- 디스크 스와핑을 하지 않는 특수한 물리 메모리 영역이라고 생각하면 편하다.
- 참고
4. Paged pool
- 우리가 흔히 알고 있는 요구 페이징 구조에서 일반적인 프레임이 할당되는 물리 메모리를 의미한다.
- 해당 영역의 메모리는 필요시 스와핑이 발생한다.
windows_process_pool_bytes는 paged pool이나 nonpaged pool의 크기를 나타낸다. 물리 메모리 수준의 개념이다.
'Operating system' 카테고리의 다른 글
CPU 스케줄링 (0) | 2021.11.03 |
---|---|
Thread (0) | 2021.10.31 |
Process - 프로세스간 통신(IPC < Socket < RPC) (0) | 2021.10.30 |
Process - 프로세스의 이해 (0) | 2021.10.16 |
댓글