본문 바로가기
Develop/Android

Andoird 메모리 사용을 분석해보자!!!

by 3-stack 2024. 1. 17.

 

 

adb shell dumpsys meminfo

 

 

```sh
Total RAM: 3,597,148K (status normal)
 Free RAM: 1,071,266K (  637,714K cached pss +   336,024K cached kernel +    97,528K free)
      ION:   237,236K (  183,672K mapped +   -18,480K unmapped +    72,044K pools)
      GPU:         0K
 Used RAM: 3,462,226K (3,094,698K used pss +   367,528K kernel)
 Lost RAM:   194,720K
     ZRAM:   319,316K physical used for 1,759,976K in swap (4,194,300K total swap)
   Tuning: 192 (large 512), oom   322,560K, restore limit   107,520K (high-end-gfx)
```


* Total RAM: 시스템 예약 메모리를 제외한 가용 메모리 크기.
* Free RAM + Used RAM이 Total RAM을 초과하는 이유:
- 캐시된 메모리는 종종 양쪽에 일부 포함될 수 있다.
- 가상 메모리와 스왑공간이 포함된다.
- ZRAM(압축된 메모리 사용으로 효율적 메모리 관리 지원)과 같은 보조 메모리 포함
* ION: 메모리 관리를 위한 시스템이 사용중인 메모리량.
* Tunning
- OOM 제한: 시스템이 OOM, 즉 메모리 부족 상태로 간주되는 임계값. 사용 가능한 메모리량이 이 값 이하로 떨어질 경우, Android 시스템은 메모리 부족 상태로 간주하고 OOM Killer를 활성화하여 메모리를 확보하기 위해 일부 프로세스를 종료시킬 수 있다.
- Restore Limit(High-End-Gfx): 이는 시스템이 메모리 부족 상태에서 벗어나 정상 상태로 복원되기 위해 확보해야 하는 메모리 양을 나타낸다. 여기서 "high-end-gfx"는 고성능 그래픽 처리에 필요한 메모리 관리를 위한 설정을 의미. 이 경우, 시스템은 최소 107,520K(약 105MB)의 메모리를 확보하기 위해 노력할 것 이다.


결론적으로, 이 설정은 사용 가능한 메모리량이 322,560K 이하로 떨어질 때 메모리 부족 상태를 감지하고, 이후 시스템이 정상적으로 기능을 수행하기 위해 최소 107,520K의 메모리를 확보하려고 시도한다는 것을 의미한다. 이는 시스템의 안정성을 유지하고 메모리 부족으로 인한 문제를 방지하기 위한 조치이다.

 

 


※ PSS(Proportional Set Size)란?
## PSS의 작동 방식:
1) 개별적으로 사용하는 메모리: 프로세스가 독점적으로 사용하는 메모리의 양. 이는 다른 어떤 프로세스와도 공유되지 않는 부분.
2) 공유 메모리의 비례 배분: 프로세스가 다른 프로세스와 공유하는 메모리의 경우, PSS는 이 공유된 메모리를 해당 메모리를 공유하는 모든 프로세스에 비례적으로 배분하여 계산한다. 예를 들어, 만약 두 개의 프로세스가 10MB의 메모리를 공유하고 있다면, PSS는 각 프로세스에 5MB씩을 할당한다.

## PSS의 중요성:
1) 정확한 메모리 사용량 파악: PSS는 프로세스가 실제로 사용하는 메모리 양을 보다 정확하게 반영한다. 단순히 개별 프로세스에 할당된 메모리 양만 고려하는 것보다, 공유된 메모리의 사용도 고려하기 때문에 실제 메모리 사용량을 더 잘 이해할 수 있다.
2) 시스템 자원 관리: 운영 체제는 PSS 값을 사용하여 시스템의 전체 메모리 사용량을 관리하고, 메모리 부족 상황에서 어떤 프로세스를 종료할지 결정하는 데 도움을 받을 수 있다.

※ RSS (Resident Set Size)란?
RSS는 프로세스에 의해 현재 사용 중인 물리적 메모리(RAM)의 양을 나타내는 지표이다. 이는 프로세스가 실제로 메모리에 올려놓고 사용하고 있는 메모리의 총량을 의미한다.

## RSS의 특징:
1) 독점적 및 공유 메모리 포함: RSS는 프로세스가 독점적으로 사용하는 메모리 뿐만 아니라, 다른 프로세스와 공유하는 메모리 전체를 포함한다.
2) 즉각적 메모리 사용: RSS는 현재 메모리에 로드되어 사용 중인 데이터의 양을 반영한다. 스왑된(디스크로 옮겨진) 메모리는 포함되지 않는다.

## PSS와 RSS 비교:
* 공유 메모리 처리 방식의 차이: PSS와 RSS의 주요 차이점은 공유 메모리를 처리하는 방식에 있다. PSS는 공유 메모리를 그 메모리를 공유하는 프로세스들 사이에 비례적으로 분할하여 계산하는 반면, RSS는 공유 메모리 전체를 각 프로세스의 메모리 사용량에 포함한다.
* 메모리 사용량의 과대평가 가능성: RSS는 공유 메모리를 각 프로세스에 전부 할당하므로, 메모리 사용량을 과대평가할 가능성이 있다. 예를 들어, 여러 프로세스가 동일한 라이브러리를 공유하는 경우, RSS는 이 라이브러리를 각 프로세스의 메모리 사용량에 전체적으로 추가한다.
* 시스템 자원 관리에서의 중요성: PSS는 전체 시스템의 메모리 사용량을 더 정확하게 평가하는 데 유용한 반면, RSS는 특정 프로세스가 실제로 메모

 

 


https://source.android.com/docs/core/perf/lmkd#psi-monitors-versus-vmpressure-signals
https://developer.android.com/topic/performance/memory-management?hl=ko

댓글