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를 참고하시면 좋습니다.
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력