一些常用命令

进程相关命令

作用

命令

查看lru list

adb shell dumpsys activity lru

查看总体进程相关信息

adb shell dumpsys activity processes

查看某个进程的详细信息

adb shell dumpsys activity p processName

查看进程的oom

adb shell dumpsys activity oom

内存相关命令

作用

命令

查看历史Lmk查杀对应级别数量

dumpsys activity lmk

process+oom+category+total

dumpsys meminfo

输出指定包名的进程,可能包含多个进程

dumpsys meminfo --package

输出指定pid的某一进程

dumpsys meminfo

查看手机详细的内存信息

cat /proc/meminfo

进程优先级

ADJ级别

adjString

取值

含义

INVALID_ADJ

-10000

未初始化的值

CACHED_APP_MAX_ADJ

999

不可见进程adj的最大值

CACHED_APP_MIN_ADJ

“cch”

900

不可见进程adj的最小值

CACHED_APP_LMK_FIRST_ADJ

950

lmk 最先查杀的级别

SERVICE_B_ADJ

"svcb "

800

B List中的Service

PREVIOUS_APP_ADJ

"prev "

700

上一个进程

HOME_APP_ADJ

"home "

600

Home进程

SERVICE_ADJ

"svc "

500

服务进程

HEAVY_WEIGHT_APP_ADJ

"hvy "

400

重量级进程

BACKUP_APP_ADJ

"bkup "

300

备份进程

PERCEPTIBLE_LOW_APP_ADJ

"prcl "

250

感知低的进程

PERCEPTIBLE_APP_ADJ

"prcp "

200

可感知进程

VISIBLE_APP_ADJ

"vis "

100

可见进程

PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ

50

当前为前台Service,15秒内曾是前台App

FOREGROUND_APP_ADJ

"fg "

0

前台进程

PERSISTENT_SERVICE_ADJ

"psvc "

-700

关联着系统和persistent进程

PERSISTENT_PROC_ADJ

"pers "

-800

系统persistent进程

SYSTEM_ADJ

"sys "

-900

仅指system_server进程

NATIVE_ADJ

"ntv "

-1000

native进程

procState级别

procStateString

取值

含义

PROCESS_STATE_NONEXISTENT

“NONE”

20

不存在

PROCESS_STATE_CACHED_EMPTY

"CEM "

19

进程处于cache状态且为空进程

PROCESS_STATE_CACHED_RECENT

"CRE "

18

进程处于cached状态,且与现有的最近任务一致的activity

PROCESS_STATE_CACHED_ACTIVITY_CLIENT

“CACC”

17

进程处于cached状态,且为另一个cached进程(内含Activity)的client进程

PROCESS_STATE_CACHED_ACTIVITY

"CAC "

16

进程处于cached状态且内含activity

PROCESS_STATE_LAST_ACTIVITY

“LAST”

15

后台进程且拥有上一次显示的activity

PROCESS_STATE_HOME

“HOME”

14

后台进程且拥有Home Activity

PROCESS_STATE_HEAVY_WEIGHT

"HVY "

13

后台进程,但无法执行restore

PROCESS_STATE_TOP_SLEEPING

“TPSL”

12

设备处于sleeping时的top app

PROCESS_STATE_RECEIVER

“RCVR”

11

后台进程且正在运行receiver

PROCESS_STATE_SERVICE

"SVC "

10

后台进程且正在运行Service

PROCESS_STATE_BACKUP

“BKUP”

9

CACHED_APP_MIN_ADJ后台进程且正在执行backup/restore操作

PROCESS_STATE_TRANSIENT_BACKGROUND

“TRNB”

8

短暂的处于后台的进程

PROCESS_STATE_IMPORTANT_BACKGROUND

“IMPB”

7

对用户很重要,但是用户不可感知

PROCESS_STATE_IMPORTANT_FOREGROUND

“IMPF”

6

对用户很重要,用户可感知

PROCESS_STATE_BOUND_FOREGROUND_SERVICE

“BFGS”

5

拥有一个前台Service且由系统绑定

PROCESS_STATE_FOREGROUND_SERVICE

"FGS "

4

拥有一个前台Service

PROCESS_STATE_BOUND_TOP

“BTOP”

3

绑定Top app的进程

PROCESS_STATE_TOP

"TOP "

2

拥有当前用户可见top Activity的进程

PROCESS_STATE_PERSISTENT_UI

“PERU”

1

persistent系统进程,并正在执行UI操作

PROCESS_STATE_PERSISTENT

"PER "

0

persistent系统进程

进程提升优先级的原因

从bugreport中查看

首先搜索dumpsys activity processes找到Process LRU list找到对应进程名如下:

Proc # 6: hvy B/ /HVY trm: 0 16885:com.qiyi.video/u0a209 (cch-act)

hvy 和 HVY 分别代表adj和procState,B代表SCHED_GROUP_BACKGROUND,0代表trimMemoryLevel 为0,cch-act代表adjType

一些常见的示例

  1. 进程adj > Service的由system拉起的client进程,且没有其他flag等,adj会为VISIBLE_APP_ADJ,adjType会为"service"
    一般涉及到adjTarget基本跟Service和ContentProvider相关

Proc #12: vis F/S/FGS trm: 0 19817:com.xiaomi.wearable/u0a495 (service)
com.xiaomi.wearable/.home.devices.ble.sync.NotifySyncService<=Proc{1705:system/1000}

vis = 100 代表可见进程,F = SCHED_GROUP_DEFAULT ,S代表该进程有前台Service,FGS = 5代表procState,adjtype为"service",adjTarget为com.xiaomi.wearable/.home.devices.ble.sync.NotifySyncService ,adjSource为Proc{1705:system/1000}

  1. 设置进程的maxAdj
    Proc # 6: vis R/ /TOP trm: 0 20886:com.miui.bugreport/1000 (cch-started-ui-services)

vis=100 代表可见进程,R=SCHED_GROUP_RESTRICTED,TOP=2,代表当前进程拥有Top Activity,但是这些跟adjType="cch-started-ui-services"不匹配,所以被提升优先级了

APP* UID 1000 ProcessRecord{49fbeae 20886:com.miui.bugreport/1000}
// 最大adj为100,最大procState为2
oom: max=100 procState: max=2 curRaw=1001 setRaw=1001 cur=100 set=100
lastCompactTime=0 lastCompactAction=0 mCurSchedGroup=1 setSchedGroup=1 systemNoUi=false trimMemoryLevel=0
curProcState=2 mRepProcState=2 pssProcState=2 setProcState=2 lastStateTime=-1m5s440ms

本地查看

直接使用adb shell dumpsys activity oom

主要实现在ActivityManagerService的dumpOomLocked

Process OOM control (82 total, non-act at 4, non-svc at 4):
PERS #81: sys F/ /PER trm: 0 1684:system/1000 (fixed)
oom: max=-900 curRaw=-900 procState: max=21 setRaw=-900 cur=-900 set=-900
state: cur=PER set=PER lastPss=242MB lastSwapPss=7.8MB lastCachedPss=0.00
cached=false empty=false hasAboveClient=false