ActivityManagerService解读之进程管理(相关信息持续补充)

在介绍updateOomAdjLocked方法之前,我们先补充一些进程相关的信息,便于后续更好的理解。

进程/轻量级进程状态

S:Suspended可中断的睡眠,可能是由于输出 Trace、GC 或 debug 被暂停
R:Running/Runnable运行或就绪状态
D:Disk Sleep不可中断的睡眠,通常是在等待 I/O,比如磁盘 I/O、网络 I/O 或者外设 I/O
Z:Zombie退出状态,作为僵尸进程等待回收
X:Dead退出状态,即将被回收
T:Stopped/Tracing Stop暂停或跟踪状态
kTerminatedTERMINATEDTS_ZOMBIEThread.run has returned but Thread* still around
kRunnableRUNNABLETS_RUNNINGrunnable
kTimedWaitingTIMED_WAITINGTS_WAITin Object.wait() with a timeout
kSleepingTIMED_WAITINGTS_SLEEPINGin Thread.sleep()
kBlockedBLOCKEDTS_MONITORblocked on a monitor
kWaitingWAITINGTS_WAITin Object.wait() with a timeout
kWaitingForLockInflationWAITINGTS_WAITblocked inflating a thin-lock
kWaitingForTaskProcessorWAITINGTS_WAITblocked waiting for taskProcessor
kWaitingForGcToCompleteWAITINGTS_WAITblocked waiting for GC
kWaitingForCheckPointsToRunWAITINGTS_WAITGC waiting for checkpoints to run
kWaitingPerformingGcWAITINGTS_WAITperforming GC
kWaitingForDebuggerSendWAITINGTS_WAITblocked waiting for events to be sent
kWaitingForDebuggerToAttachWAITINGTS_WAITblocked waiting for debugger to attach
kWaitingInMainDebuggerLoopWAITINGTS_WAITblocking/reading/processing debugger events
kWaitingForDebuggerSuspensionWAITINGTS_WAITwaiting for debugger suspend all
kWaitingForJniOnLoadWAITINGTS_WAITwaiting for execution of dlopen and JNI on load code
kWaitingForSignalCatcherOutputWAITINGTS_WAITwaiting for signal catcher IO to complete
kWaitingInMainSignalCatcherLoopWAITINGTS_WAITblocking/reading/processing signals
kWaitingForDeoptimizationWAITINGTS_WAITwaiting for deoptimization suspend all
kWaitingForMethodTracingStartWAITINGTS_WAITwaiting for method tracing to start
kWaitingForVisitObjectsWAITINGTS_WAITwaiting for visiting objects
kWaitingForGetObjectsAllocatedWAITINGTS_WAITwaiting for getting the number of allocated objects
kWaitingWeakGcRootReadWAITINGTS_WAITwaiting on the GC to read a weak root
kWaitingForGcThreadFlipWAITINGTS_WAITwaiting on the GC thread flip (CC collector) to finish
kStartingNEWTS_WAITnative thread started not yet ready to run managed code
kNativeRUNNABLETS_RUNNINGrunning in a JNI native method
kSuspendedRUNNABLETS_RUNNINGsuspended by GC or debugger

 adb shell cat /proc/stat信息解读

cpu175450770389104310536443356632987091024223616400
cpu01728513412512762314118536149278059041000
cpu114757933401126758272340876293916374000
cpu211101410281115137285843432203576809000
cpu3293111895853132985513491875912336000
cpu437001488115848328430132998367000
cpu5448306948211623282511701406398000
cpu6523535834208243195113271642391000
cpu7602417146945237783215502742064448000
intr9319494000001636254001445523104165610753
ctxt1535500109         
btime77945         
processes1         
procs_running0         
procs_blocked12604019         
softirq 42707231384371379231224111158260308815522924880

我们通过adb shell cat /proc/stat获取的是从系统启动开始累积到当前时刻的CPU活动信息,cpu信息以第一行为例,他们分别表示的意思如下
175450:从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
770389:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
104310:从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
536443:从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
3566329:从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies)
8709:从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
102422:从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)
纵向其他信息分别代表的意思如下
intr:这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
ctxt:自系统启动以来CPU发生的上下文交换的次
btime:给出了从系统启动到现在为止的时间,单位为秒
processes:自系统启动以来所创建的任务的个数目(total_forks)
procs_running:当前运行队列的任务的数目
procs_blocked:当前被阻塞的任务的数目

adb shell cat /proc/***/stat信息解读

以测试手机1339进程为例:

pid进程包括轻量级进程及线程号1339
comm应用程序或命令的名字(system_server)
task_state任务状态S
ppid父进程ID637
pgid线程组号637
sid该任务所在的会话组ID0
tty_nr该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号0
tty_pgrp终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID-1
task→flags进程标志位,查看该任务的特性1077936448
min_flt该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数979752
cmin_flt累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目3291
maj_flt该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数1546
cmaj_flt累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目2
utime该任务在用户态运行的时间,单位为jiffies30282
stime该任务在核心态运行的时间,单位为jiffies26395
cutime累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies10
cstime累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies4
priority任务的动态优先级18
nice任务的静态优先级-2
num_threads该任务所在的线程组里线程的个数145
it_real_value由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位0
start_time该任务启动的时间,单位为jiffies5069
vsize该任务的虚拟地址空间大小4864786432
rss该任务当前驻留物理地址空间的大小79719
rlim该任务能驻留物理地址空间的最大值1.84467440737096E+019
start_code该任务在虚拟地址空间的代码段的起始地址1
end_code该任务在虚拟地址空间的代码段的结束地址1
start_stack该任务在虚拟地址空间的栈的结束地址0
kstkespesp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致0
kstkeip指向将要执行的指令的指针, EIP(32 位指令指针)的当前值0
pendingsig待处理信号的位图,记录发送给进程的普通信号0
block_sig阻塞信号的位图4612
sigign忽略的信号的位图1
sigcatch被俘获的信号的位图1073775864
wchan如果该进程是睡眠状态,该值给出调度的调用点0
nswap被swapped的页数,当前没用0
cnswap所有子进程被swapped的页数的和,当前没用0
exit_signal该进程结束时,向父进程所发送的信号17
ask_cpu(task)运行在哪个CPU上0
task_rt_priority实时进程的相对优先级别0
task_policy进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程0

 进程ADJ值

SYSTEM_ADJ-900系统进程
PERSISTENT_PROC_ADJ-800系统persistent进程
PERSISTENT_SERVICE_ADJ-700关联着系统或persistent进程
FOREGROUND_APP_ADJ0前台进程
VISIBLE_APP_ADJ100可见进程
PERCEPTIBLE_APP_ADJ200可感知的进程
BACKUP_APP_ADJ300备份进程
HEAVY_WEIGHT_APP_ADJ400重量级进程
SERVICE_ADJ500服务进程
HOME_APP_ADJ600Home进程
PREVIOUS_APP_ADJ700前一个App进程
SERVICE_B_ADJ800B集合中的进程
CACHED_APP_MIN_ADJ900缓存进程的最小值
CACHED_APP_MAX_ADJ906缓存进程的最大值

进程的状态描述

PROCESS_STATE_UNKNOWN-1 
PROCESS_STATE_PERSISTENT0系统persistent进程
PROCESS_STATE_PERSISTENT_UI1系统persistent进程,正在进行UI相关的操作
PROCESS_STATE_TOP2涵盖了用户可见活动的进程
PROCESS_STATE_FOREGROUND_SERVICE3托管前台服务的进程
PROCESS_STATE_BOUND_FOREGROUND_SERVICE4通过bind的形式托管前台服务的进程
PROCESS_STATE_IMPORTANT_FOREGROUND5对于用户比较重要的前台进程
PROCESS_STATE_IMPORTANT_BACKGROUND6对于用户比较重要的后台进程
PROCESS_STATE_TRANSIENT_BACKGROUND7短暂的后台进程
PROCESS_STATE_BACKUP8备份进程
PROCESS_STATE_SERVICE9服务进程
PROCESS_STATE_RECEIVER10广播进程
PROCESS_STATE_TOP_SLEEPING11和PROCESS_STATE_TOP一样,但是区别是手机处于sleeping状态
PROCESS_STATE_HEAVY_WEIGHT12重量级进程
PROCESS_STATE_HOME13Home进程
PROCESS_STATE_LAST_ACTIVITY14后台进程,但是托管了用户最后运行的Activity
PROCESS_STATE_CACHED_ACTIVITY15后台托管有Activity的进程
PROCESS_STATE_CACHED_ACTIVITY_CLIENT16托管存在客户端的Activity的进程
PROCESS_STATE_CACHED_RECENT17与recent中关联的缓存进程
PROCESS_STATE_CACHED_EMPTY18空进程
PROCESS_STATE_NONEXISTENT19不存在的进程

进程的内存

Item

全称

含义

等价

USS

Unique Set Size

物理内存

进程独占的内存

PSS

Proportional Set Size

物理内存

PSS= USS+ 按比例包含共享库

RSS

Resident Set Size

物理内存

RSS= USS+ 包含共享库

VSS

Virtual Set Size

虚拟内存

VSS= RSS+ 未分配实际物理内存

参考文章:
https://blog.csdn.net/cybertan/article/details/7596633
https://my.oschina.net/u/262208/blog/378660

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值