상세 컨텐츠

본문 제목

안드로이드 Low memory killer (LMK) 에 의해서 app(apk) 안죽게 하는 방법

IT : SmartPhone

by 휀스 2014. 6. 26. 02:09

본문



안드로이드 Low memory killer (LMK) 에 의해서 app(apk) 안 죽게 하는 방법


안드로이드는 app 실행 속도를 높이기 위해 메모리에 올라간 apk 를 삭제하지 않습니다. 이 상태에서 메모리가 부족하게 되면 LMK 정책에 따라 apk 를 kill 하기 시작합니다.


LMK 는 Out Of Memory 를 개선한 메모리 관리 프로그램입니다. 가용 메모리의 양을 체크하여 메모리가 부족할 경우 기존에 메모리 상에 올라와 있던 process 를 관리 정책에 따라 하나씩 종료 시킵니다.



이대 kill 되는 순서는 각 apk process 실행시 할당된 oom_adj 값과 match 되는 oom_score 값에 의해 종료가 됩니다.

하지만 필요해의해 특정 apk 만은 종료되지 않게 해야하는 경우가 발생합니다. 이럴 때 간단하게 oom_adj 값만 바꿔서 우선순위를 설정할 수 있으면 좋겠지만 apk 의 life cycle 에 의해 oom_score 값이 조절 되므로 강제로 oom_adj 값을 바꾼다고 해도 다시 잠시 후 원상복구가 됩니다.


이때 oom_adj 값을 바꾸는 방법이 있습니다.

바로 file permission 을 이용하는 방법입니다.


oom_adj 값이 있는 폴더의 oom_adj 내용을 바꾸기 위해서는


echo "-15" > /proc/2345/omm_adj


라고 명령을 실행하면 oom_adj 값이 설정한 -15 보다 한단계 위인 -14를 표시하더군요. 하지만 LMK에 의해 죽는 processor 는 초기 설정값이 낮다 하여도 추후 설정값이 높을 경우 kill 대상이 되어버립니다.



그럼 이 문제를 해결하기 위해서는 oom_adj 값을 처음 실행시 세팅 후 다시 세팅을 해 주어야 합니다.


순서대로 정리해 보자면 아래와 같습니다.


죽이지 말아야 할 oom_adj 값 확인

echo "-15" > /proc/2345/omm_adj 명령으로 oom_adj 값 변경

chmod 444 /proc/2345/oom_adj 명령으로 root 이외에 쓰기권한 삭제


이렇게 해주고 나서 다시한번 cat 명령으로 /proc/2345/omm_adj 의 값을 확인해 주면 됩니다. system 도 root 는 아니라 세팅을 변경할 수 없습니다.


이렇게 설정하고 나면 해당 apk 의 process 는 절대 변경되지 않고 LMK 에 의해 종료되는 일도 없을 것 입니다.


이상 안드로이드 Low memory killer (LMK) 에 의해서 app(apk) 안죽게 하는 방법에 대한 글 이였습니다.



관련글 더보기