AlphaMOT

윈도우 작업 관리자를 통한 메모리 분석 본문

Analysis & Research

윈도우 작업 관리자를 통한 메모리 분석

Prog[r]a[m]mer 2023. 8. 11. 02:17

1. [성능] 탭의 메모리 화면

현재 작업 관리자를 실행한 PC에는 16GB * 2 메모리가 삽입된 상태이다. [성능] 탭의 항목들은 다음과 같다.

1) 사용 중(압축)

현재 시스템이 사용 중인 물리적인 메모리 양을 나타낸다. 즉, 현재 실행 중인 프로그램들이 실제로 사용하고 있는 메모리 양을 보여준다. 이 값이 높을 수록 시스템이 실제로 메모리를 많이 사용하고 있음을 의미한다.

2) 사용 가능

현재 시스템에서 사용 가능한 물리적 메모리의 양을 나타낸다. 즉, 현재 사용 중이지 않은 메모리 중에서 얼마나 많은 메모리를 추가로 할당할 수 있는지를 보여준다. 이 메모리는 실제로 커밋되었지만 현재 사용 중이지 않은 메모리가 포함될 수도 있다. 

3) 커밋됨

이 값은 현재 프로세스들이 예약한 가상 메모리 양의 총 합을 의미한다(가상 메모리의 총 합이란 표현이 어색하지만, 결국 물리 메모리에 커밋되면 서로 다른 물리 주소를 가질 것이기에 총 합으로 표현). 커밋된 메모리는 물리 메모리에 완전히 로드되지 않을 수 있다. 따라서 '/'을 기준으로 앞의 숫자는 시스템에서 실제로 물리적으로 할당된 메모리의 양을 나타내고, 뒤의 숫자는 현재 프로세스들이 예약 후 커밋한 메모리의 총 합을 의미한다. 이는 현재 사용 중인 물리 메모리와 더불어 미래에 사용될 수 있는 메모리의 양의 합이라 할 수 있다. 

더보기

Q. '사용 중' 항목의 값과 '커밋됨' 항목의 '/' 앞 값이 다른 이유? (의심점)

1) 메모리 누수(Memory Leak): 어떤 프로세스가 메모리를 할당하고 해제하지 않고 계속해서 사용하는 경우, '커밋됨' 값은 늘어나지만 '사용 중' 값은 증가하지 않을 수 있어 보인다. 이로 인해 두 값이 다르게 나타날 수 있을 것이다.

2) 메모리 관리 이슈: 어떤 프로세스가 메모리를 사용하는 방식에 관련한 문제가 있는 경우에도 '커밋됨'과 '사용 중' 값이 다를 수 있을 것이다. 예를 들어 일부 메모리는 예약 후 커밋되어 있지만 실제로는 제대로 사용하지 않는 상황이 발생할 수 있을 것이다.

4) 캐시됨

파일 시스템 캐시에 의해 사용되고 있는 메모리 양을 의미한다. 파일 시스템 캐시는 최근에 액세스한 파일의 데이터를 메모리에 저장하여 미래에 빠른 액세스를 가능케 하는 역할을 한다. 달리 말하자면 운영체제의 메모리 캐시이다. 파일 I/O를 수행을 디스크에 존재하는 파일에 직접적으로 수행하지 않고, 이 메모리 캐시 영역에 캐싱된 파일 데이터에 수행한다. 

만약 애플리케이션(프로세스)들이 더 많은 메모리를 필요로 할 때, 시스템은 캐시된 메모리를 해제하고 해당 애플리케이션에 할당할 수 있다. 유연하게 관리되며, 시스템의 전체적이 성능 향상에 기여한다. 

더보기

Q. '사용 중' 항목의 값이 '캐시됨' 항목의 값보다 큰 이유는?

메모리 캐시에 캐싱된 데이터들은 파일 시스템의 I/O 대상들이지만, '사용 중' 항목은 나아가 프로세스 수행 중 필요한 스택, 힙 메모리 등 추가적인 사용 용량까지 나타내기에 '사용 중' 항목 값이 더 크다. '사용 중' 항목에 표현된 메모리는 다음과 같은 것 영역들의 총 합일 것이다.

- 코드와 데이터: 실행 중인 프로세스의 코드와 데이터 영역 포함

- 스택: 각 프로세스마다의 별도의 스택 메모리 영역

- 힙: 동적으로 할당된 메모리

- 기타 운영 체제 및 프로세스 관련 메모리 사용

5) 페이징 풀

커널 모드에서 실행되는 프로세스들을 위한 메모리 공간이다. 페이징 풀은 주로 작은 크기의 메모리 블록들로 나뉘어져 있으며, 주로 커널 드라이버 및 커널 프로세스가 할당되는 공간이다. 이 메모리는 페이지 파일을 사용하여 디스크로 스왑될 수 있다. 페이징 풀은 주로 동적으로 할당되는 작은 메모리 덩어리들을 관리하기 위해 사용된다. 

6) 비페이징 풀

커널의 핵심 기능을 지원하기 위한 공간이다. 이 공간에 있는 메모리는 페이지 파일로 스왑되지 않는다. 항상 물리 메모리에 상주하여 액세스 속도를 높이기 위한 것이다. 주로 중요한 커널 데이터 구조와 커널 쓰레드 스택 등이 여기에 할당된다. 

 

 

2. [세부 정보] 탭의 메모리 관련 열 정보

1) 작업 집합(메모리)

현재 실행 중인 프로세스가 사용하는 물리적인 메모리의 양이며, 가상 주소의 관점에서보면 프로세스 실행 중 커밋된 후 최근에 참조된 페이지 집합이라 할 수 있다. 

프로그램의 실행 코드가 저장된 '코드 영역', 정적인 데이터와 전역 변수들이 저장된 '데이터 영역', 동적으로 크기가 조절되는 '스택 영역'과 '힙 영역', 기타 프로세스 간 공유하는 데이터 등은 페이지라는 단위로 커밋되고, 로드된다. 이 중 실제로 참조된 영역 등의 합이라 할 수 있다.

 

작업 집합(메모리) = 메모리(개인 작업 집합) + 메모리(공유된 작업 집합)

 

참고로 페이지 커밋이 일어나면 해당 페이지에 대한 물리 메모리 할당이 이루어진다. 하지만 이 때 데이터가 실제로 로드되지는 않는다. 로드되는 시점은 프로세스가 해당 페이지를 실제로 접근하려고 할 때 이다. 이 때 해당 페이지의 데이터가 필요하면 그 때 실제 메모리에 로드되는데, 이러한 메커니즘은 페이지 폴트(page fault)라고 불리며, 운영제체가 관리한다. 

작업 집합(메모리) = 메모리(개인 작업 집합) + 메모리(공유된 작업 집합)

2) 최고 작업 집합(메모리)

프로세스가 실행되면서 가장 높은 값을 찍었던 작업 집합(메모리)의 크기를 나타낸다. 달리 표현하자면 프로세스에서 사용하는 작업 집합 메모리 중 최대 메모리 양이며, 일반적으로 이야기하는 최대 사용 메모리 양이다.

 

3) 메모리(개인 작업 집합)

작업 집합의 하위 집합이며, 다른 프로세스와 공유할 수 없는 메모리 공간 크기이다. 즉, 프로세스가 실행하며 사용 중인 확보한 물리 메모리 중 공유되지 않은 메모리의 크기이다. 

 

4) 메모리(공유된 작업 집합)

작업 집합에 포함되는 집합 중 여러 프로세스 간에 공유되는 메모리 영역의 크기를 나타내는 항목이다. 여러 프로세스가 동일한 데이터나 코드를 공유할 때 발생한다. 예들 들어, 프로세스들이 동일한 라이브러리(.DLL)를 사용하거나 동일한 리소스를 공유하는 경우에 해당한다. 

예를 들어 , 프로세스들이 같은 DLL을 사용하고 있는 경우, 해당 라이브러리의 코드와 데이터는 실제 물리 메모리에서 한 번만 로드되고 공유된다. 이 경우 공유된 작업 집합 항목에 포함되어 공유되는 메모리 영역의 크기가 표시된다. 

더보기

※ 확인이 필요한 사항: 동일한 동적 라이브러리(A.dll)를 참조하는 여러 프로세스들이 실행 중일 때, 첫 번째로 해당 동적 라이브러리를 참조하여 실행되는 프로세스는 해당 라이브러리의 코드와 데이터 크기가 개인 작업 집합에 할당될 것입니다. 나머지 프로세스들은 이 동적 라이브러리의 코드와 데이터 크기가 공유된 작업 집합에 할당될 수 있습니다. / source: 일부 stackoverflow 글

 

5) 커밋 크기

개인 작업 집합(개인 페이지)에 할당된 메모리와 페이지 파일의 커밋된 크기를 말한다. 

공유된 작업 집합은 이 항목에 포함되지 않는다. 따라서 작업 집합(메모리)이 커밋 크기 항목보다 클 수도 있다.

 

6) 페이징 풀

실행 중인 프로세스가 요청하는 커널의 페이징 풀 공간 크기.

 

7) NP(논-페이징) 풀

실행 중인 프로세스가 요청하는 커널의 비-페이징 풀 공간 크기.

더보기

Q. 작업 관리자의 세부 정보에 각 프로세스 별로 "페이징 풀"과 "NP 풀" 항목이 존재하는 이유

1) 성능 모니터링: 페이징 풀과 NP 풀은 운영 체제의 커널 모드에서 사용되는 메모리 영역으로, 이 영역들의 크기와 사용량은 시스템의 성능에 영향을 미칠 수 있다. 작업 관리자는 각 프로세스의 페이징 풀과 NP 풀 사용량을 보여주므로, 어떤 프로세스가 얼마나 많은 커널 메모리를 사용하는지를 확인할 수 있다.

2) 성능 문제 분석: 페이징 풀과 NP 풀 사용량을 확인하여 프로세스가 얼마나 많은 커널 메모리를 사용하는지 파악할 수 있다. 이를 통해 프로세스의 성능 문제나 메모리 관련 이슈를 식별하고 해결할 수 있다.

 

8) 페이지 폴트

각 프로세스가 실행되면서 발생한 페이지 폴트(page fault)의 횟수를 표시한다. 

이 페이지 폴트 횟수가 비교적 높다는 것은 메모리 부족으로 인한 성능 저하를 나타낼 수 있으며, 또한 프로세스의 메모리 사용량을 조정하거나 최적화가 필요하다는 힌트가 될 수도 있다.