상세 컨텐츠

본문 제목

linux stream 편집기 sed 명령 사용 해서 oom_adj 값 바꾸기

IT : Ubuntu

by 휀스 2015. 10. 17. 00:51

본문

linux 를 기반으로 운영되는 android 에서 low memory killer (LMK) 가 동작하면 특정 app 들이 차례로 종료되게 됩니다. 이때 종료되는 순서를 정해주는 것이 oom_adj 값입니다.



Out Of Memory ADJust value 를 조절하게되면 일찍 종료될 app가 더 나중에 종료되게 되어 차후 해당 app가 재 실행될 때 빠른 속도로 실행될 수 있습니다. 해당 app 가 service 를 가지고 있고 LMK에 의해 service 가 종료되는 경우가 발생하게 되면 app가 정상적으로 동작하기도 힘들어 지겠죠.


이럴때 대응할 수 있는 방법 중 하나는 oom_adj 값을 조절해 주는 것 입니다.

oom_adj 값은 +15 에서 -15까지의 값 중 하나를 갖게 됩니다. LMK 에 의해 가장 먼저 종료되는 것은 +15이며 -15가 가장 마지막에 종료됩니다.


각 process에 대한 정보가 있는 /proc/ 폴더를 보면 현재 실행중인 process id 에 해당하는 폴더가 존재하고 그 내부에 process 의 정보가 저장되어 있으며 LMK에 대한 oom_adj 값이 있습니다.


dr-xr-xr-x 185 root       root                0 Jun 17 22:57 ./

drwxr-xr-x  25 root       root             4096 Mar 20 23:26 ../

dr-xr-xr-x   9 root       root                0 Jun 17 22:57 1/

dr-xr-xr-x   9 root       root                0 Jun 17 22:57 10/

dr-xr-xr-x   9 root       root                0 Jun 17 22:57 1052/

dr-xr-xr-x   9 root       root                0 Jun 17 22:57 1059/

dr-xr-xr-x   9 daemon     daemon              0 Jun 17 22:57 1095/

dr-xr-xr-x   9 whoopsie   whoopsie            0 Jun 17 22:57 1098/


process 3376 에 대한 정보 입니다.


jbon@isPC:~$ ll /proc/3376

total 0

dr-xr-xr-x   9 jbon jbon 0 Jun 17 23:58 ./

dr-xr-xr-x 185 root  root  0 Jun 17 22:57 ../

dr-xr-xr-x   2 jbon jbon 0 Jun 17 23:59 attr/

-rw-r--r--   1 jbon jbon 0 Jun 17 23:59 autogroup

-r--------   1 jbon jbon 0 Jun 17 23:59 auxv

-r--r--r--   1 jbon jbon 0 Jun 17 23:59 cgroup

--w-------   1 jbon jbon 0 Jun 17 23:59 clear_refs

-r--r--r--   1 jbon jbon 0 Jun 17 23:59 cmdline

-rw-r--r--   1 jbon jbon 0 Jun 17 23:59 comm

-rw-r--r--   1 jbon jbon 0 Jun 17 23:59 oom_adj

-r--r--r--   1 jbon jbon 0 Jun 17 23:59 oom_score

-rw-r--r--   1 jbon jbon 0 Jun 17 23:59 oom_score_adj

-r--r--r--   1 jbon jbon 0 Jun 17 23:59 pagemap


process 3376 의 oom_adj 값은 0 이네요.


jbon@isPC:~$ cat /proc/3376/oom_adj

0


이 값을 변경하기 위해서는 아래와 같이 명령을 실행하면 됩니다.


$ echo "-5" > /proc/3376/oom_adj


하지만 매번 process 의 process id 를 찾아 oom_adj 값을 바꿔주어야 하는 번거로움이 있습니다. 이를 편하게 하기 위한 sed 명령을 이용해 process 이름으로 process id 를 찾아 변경하는 방법입니다.


process 가 apk 이름이 monkey 라고 할 때 oom_adj.sh 파일을 만들어 아래 내용을 넣습니다.


export processid=$(ps | grep monkey | busybox sed -r 's/(root *)([0-9]{4,}) [a-zA-Z0-9.: ]{1,}[a-z.]{1,}/\2/g')

echo "-5" > /proc/$processid/oom_adj


프로그램을 실행시킬 때 oom_adj.sh 를 실행해 주면 됩니다.





관련글 더보기