Android - adb로 실행 중인 프로세스, 쓰레드 리스트 & 메모리 정보 확인

JS · 19 Jul 2020

adb를 이용하여 디바이스에 실행 중인 프로세스와 쓰레드 정보를 확인할 수 있습니다. 또한, 메모리 사용량에 대한 정보를 알 수 있습니다.

다음과 같은 명령어를 사용하여 원하는 정보를 얻을 수 있습니다.

  • adb shell ps -ef : 실행 중인 프로세스 리스트 출력
  • adb shell ps -T : 실행 중인 쓰레드 리스트 출력
  • adb shell dumpsys meminfo [package name|pid]: 실행 중인 프로세스의 메모리 사용량에 대한 스냅샷 출력

각각의 명령어 사용 방법에 대해서 예제와 함께 알아보겠습니다.

ps 명령어

adb shell은 리눅스처럼 ps 명령어를 제공합니다. ps 명령어로 프로세스와 쓰레드 리스트를 출력할 수 있습니다.

adb shell에서 ps의 help 메시지를 확인하면 어떤 옵션을 제공하는지, 각각의 옵션이 어떤 내용을 출력하는지 알 수 있습니다.

$ adb shell ps --help
usage: ps [-AadefLlnwZ] [-gG GROUP,] [-k FIELD,] [-o FIELD,] [-p PID,] [-t TTY,] [-uU USER,]

List processes.

Which processes to show (-gGuUpPt selections may be comma separated lists):

-A  All					-a  Has terminal not session leader
-d  All but session leaders		-e  Synonym for -A
-g  In GROUPs				-G  In real GROUPs (before sgid)
-p  PIDs (--pid)			-P  Parent PIDs (--ppid)
-s  In session IDs			-t  Attached to selected TTYs
-T  Show threads also			-u  Owned by selected USERs
-U  Real USERs (before suid)

Output modifiers:

-k  Sort FIELDs (-FIELD to reverse)	-M  Measure/pad future field widths
-n  Show numeric USER and GROUP		-w  Wide output (don\'t truncate fields)

Which FIELDs to show. (-o HELP for list, default = -o PID,TTY,TIME,CMD)

-f  Full listing (-o USER:12=UID,PID,PPID,C,STIME,TTY,TIME,ARGS=CMD)
-l  Long listing (-o F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD)
-o  Output FIELDs instead of defaults, each with optional :size and =title
-O  Add FIELDS to defaults
-Z  Include LABEL

실행 중인 프로세스 리스트 출력

다음 명령어는 디바이스에 실행 중인 모든 프로세스 정보를 출력합니다.

$ adb shell ps -ef
UID            PID  PPID C STIME TTY          TIME CMD
root             1     0 0 07:14:10 ?     00:00:02 init second_stage
root             2     0 0 07:14:10 ?     00:00:00 [kthreadd]
root             4     2 0 07:14:10 ?     00:00:00 [kworker/0:0H]
root             5     2 0 07:14:10 ?     00:00:01 [kworker/u8:0]
root             6     2 0 07:14:10 ?     00:00:00 [mm_percpu_wq]

grep 명령어를 함께 사용하면 원하는 package 또는 프로세스의 정보만 출력할 수 있습니다.

$ adb shell ps -ef | grep system_server
system        2033  1777 5 07:14:18 ?     00:00:32 system_server

실행 중인 쓰레드 리스트 출력

다음 명령어는 디바이스에 실행 중인 모든 쓰레드의 정보를 출력합니다.

$ adb shell ps -T
USER           PID   TID  PPID     VSZ    RSS WCHAN            ADDR S CMD            
root             1     1     0   31784   5120 0                   0 S init
root             2     2     0       0      0 0                   0 S kthreadd
root             4     4     2       0      0 0                   0 I kworker/0:0H

만약 특정 프로세스에서 실행 중인 쓰레드만 출력하려면, 다음과 같이 PID를 옵션으로 넣어주면 됩니다. 아래 예제에서, pid 2033은 system_server의 pid입니다. pid 번호는 ps -ef 명령어를 통해서 알 수 있었습니다.

$ adb shell ps -T 2033
USER           PID   TID  PPID     VSZ    RSS WCHAN            ADDR S CMD            
system        2033  2033  1777 2111796 193180 0                   0 S system_server
system        2033  2039  1777 2111796 193180 0                   0 S Jit thread pool
system        2033  2040  1777 2111796 193180 0                   0 S Runtime worker
system        2033  2041  1777 2111796 193180 0                   0 S Runtime worker
....

실행 중인 프로세스의 메모리 정보 확인

다음과 같이 dumpsys meminfo 명령어를 입력하면, 실행 중인 프로세스들의 대략적인 메모리 사용량에 대한 스냅샷 정보가 출력됩니다.

$ adb shell dumpsys meminfo
Applications Memory Usage (in Kilobytes):
Uptime: 1474836 Realtime: 1474836

Total PSS by process:
     80,647K: system (pid 2033)
     80,004K: com.google.android.googlequicksearchbox:search (pid 2813)
     78,513K: zygote (pid 1777)
     70,264K: com.android.systemui (pid 2173)
     58,396K: com.android.chrome (pid 5356)
     55,579K: com.google.android.gms (pid 2756)
     51,626K: com.google.android.gms.persistent (pid 2579)
     47,787K: com.google.android.youtube (pid 3887)
     44,664K: com.google.android.apps.nexuslauncher (pid 2439 / activities)
     34,097K: com.google.android.apps.messaging (pid 3476)
     31,900K: com.google.android.inputmethod.latin (pid 2485)
     30,176K: com.google.android.apps.messaging:rcs (pid 5233)
....

특정 프로세스의 메모리 정보 확인

특정 프로세스의 메모리 정보만 출력하고 싶다면, 다음과 같이 pid 또는 package name을 명령어의 인자로 전달하면 됩니다.

  • adb shell dumpsys meminfo [pid]
  • adb shell dumpsys meminfo [package name]

"adb shell dumpsys meminfo [package_name|pid] -d" 처럼 "-d" 옵션을 추가하면 Dalvik 및 Art 메모리 사용량과 관련된 자세한 정보가 출력 됩니다.

다음은 pid 2033(system_server)의 메모리 정보를 출력하는 예제입니다.

$ adb shell dumpsys meminfo 2033
Applications Memory Usage (in Kilobytes):
Uptime: 1080927 Realtime: 1080927

** MEMINFO in pid 2033 [system] **
                   Pss  Private  Private     Swap     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    21249    21184        0        0    27612    23433     4178
  Dalvik Heap    17323    17272        0        0    17135    10991     6144
 Dalvik Other     1976     1976        0        0                           
        Stack       36       36        0        0                           
...

다음은 com.google.android.youtube의 메모리 정보를 출력하는 예제입니다.

$ adb shell dumpsys meminfo com.google.android.youtube
Applications Memory Usage (in Kilobytes):
Uptime: 3699899 Realtime: 3699899

** MEMINFO in pid 6789 [com.google.android.youtube] **
                   Pss  Private  Private     Swap     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    36159    36096        0        0    48536    46675     1860
  Dalvik Heap     9405     9340        0        0    13414     7286     6128
 Dalvik Other     6272     6272        0        0                           
        Stack       56       56        0        0                           

출력되는 내용들이 무엇을 의미하는지 자세히 알고 싶으시다면 Android devloper를 참고하시면 좋습니다.

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha