简介

  procstats 工具用于分析应用内存在一段时间内的使用情况(而不像 meminfo 一样在特定时间点捕获快照)。其状态转储会显示每个应用的运行时间、比例集合大小 (PSS) 和唯一集合大小 (USS) 的统计信息–引用自官网介绍查看 RAM 使用情况数据 (procstats)
  Android内部将内存状态划分为四个等级:Norm/Mod/Low/Crit,按内存的使用情况从轻度到重度的顺序排列;将屏幕状态划分为两个等级:SOff/SOn,分别表示息屏和亮屏;将进程状态按优先级从高到低划分为14个等级:Persistent/Top/Imp Fg/Imp Bg/Backup/Service/Service Rs/Receiver/Heavy Wgt/(Home)/(Last Act)/(Cch Act)/(Cch CAct)/(Cch Emty),带括号的状态被视为不活跃状态。内存状态,屏幕状态个进程状态自由组合成(内存状态数量+屏幕使用状态)*进程状态 数量的bucket,系统会统计每个bucket的持续时间,内存使用状况。
  Persistent:对应ActivityManager.PROCESS_STATE_PERSISTENT和ActivityManager.PROCESS_STATE_PERSISTENT_UI,对应persistent的系统组件;
  Top:对应ActivityManager.PROCESS_STATE_TOP和ActivityManager.PROCESS_STATE_TOP_SLEEPING,分别对应用户正在交互的进程状态和睡眠状态下用户正在交互的进程状态;
  Imp Fg:对应ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE_LOCATION,ActivityManager.PROCESS_STATE_BOUND_TOP,ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE,ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND,分别表示正在运行位置信息相关的服务进程状态,绑定了用户正在交互的组件的进程状态,正在运行前台服务的进程状态,绑定了运行前台服务组件的进程状态,前台重要进程状态。
  Imp Bg:对应ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND和ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND,分别表示后台重要服务进程状态,暂时性的后台进程运行状态。PROCESS_STATE_TRANSIENT_BACKGROUND通常是使用BIND_NOT_FOREGROUND的flag来绑定服务的进程状态,PROCESS_STATE_IMPORTANT_BACKGROUND通常是使用BIND_IMPORTANT_BACKGROUND的flag开绑定服务的进程状态。
  Backup:对应ActivityManager.PROCESS_STATE_BACKUP,表示在后台进行备份服务的进程状态。
  Service:对应ActivityManager.PROCESS_STATE_SERVICE,表示含有显式启动(startservice)的或正在执行生命周期(create,start,bind,destroy等)的Service的进程状态。
  Service Rs:表示正在启动或者重启一个服务且当时该进程只有这一个服务的进程状态。在随后的启动过程中进程状态会变化成Service状态。这个状态比较特殊,没有对应ActivityManager的任何常量。
  Receiver:对应ActivityManager.PROCESS_STATE_RECEIVER,表示正在处理广播的进程状态。
  Heavy Wgt:对应ActivityManager.PROCESS_STATE_HEAVY_WEIGHT,表示那些通过Manifest指明不能保存状态的应用进程状态(重量级进程)。
  (Home):对应ActivityManager.PROCESS_STATE_HOME,表示桌面进程状态。
  (Last Act):对应ActivityManager.PROCESS_STATE_LAST_ACTIVITY,表示上一个stopped但没有finish的activity所在的进程状态。
  (Cch Act):对应 ActivityManager.PROCESS_STATE_CACHED_ACTIVITY,如果一个进程含有不处于可见状态且不处于PAUSING,PAUSED和STOPPING状态的activity,所在进程便处于Cch Act状态。
  (Cch CAct):对应ActivityManager.PROCESS_STATE_CACHED_EMPTY,如果一个进程处于Cch Emty状态,但是有另一个含有activity的进程绑定了该Cch Emty状态的进程中的服务,就讲该进程的状态提升到Cch CAct。
  (Cch Emty):除了上述几种情况的进程,还包括没有初始化ActivityThread的进程毛都被划分成这类。
  注意,一个进程可能含有多个不同状态的activity,绑定了不同组件,或者被不同的组件绑定,进程状态的计算是按最高优先级的定的。例如,一个进程含有显式启动的服务(Service),同时含有一个STOPPED状态的activity(Last Act),那么该进程的状态将被定为Service而不是(Last Act)。

用法

Process stats (procstats) dump options:[--checkin|-c|--csv] [--csv-screen] [--csv-proc] [--csv-mem][--details] [--full-details] [--current] [--hours N] [--last N][--max N] --active] [--commit] [--reset] [--clear] [--write] [-h][--start-testing] [--stop-testing] [--pretend-screen-on] [--pretend-screen-off] [--stop-pretend-screen][<package.name>]--checkin: perform a checkin: print and delete old committed states.-c: print only state in checkin format.--csv: output data suitable for putting in a spreadsheet.--csv-screen: on, off.--csv-mem: norm, mod, low, crit.--csv-proc: pers, top, fore, vis, precept, backup,service, home, prev, cached--details: dump per-package details, not just summary.--full-details: dump all timing and active state details.--current: only dump current state.--hours: aggregate over about N last hours.--last: only show the last committed stats at index N (starting at 1).--max: for -a, max num of historical batches to print.--active: only show currently active processes/services.--commit: commit current stats to disk and reset to start new stats.--section: proc|pkg-proc|pkg-svc|pkg-asc|pkg-all|all options can be combined to select desired stats--reset: reset current stats, without committing.--clear: clear all stats; does both --reset and deletes old stats.--write: write current in-memory stats to disk.--read: replace current stats with last-written stats.--start-testing: clear all stats and starting high frequency pss sampling.--stop-testing: stop high frequency pss sampling.--pretend-screen-on: pretend screen is on.--pretend-screen-off: pretend screen is off.--stop-pretend-screen: forget "pretend screen" and use the real state.-a: print everything.-h: print this help text.<package.name>: optional name of package to filter output by.

输出信息

  使用常规的dumpsys procstats -a输出的内容可以划分成如下面代码所示:
  1."COMMITTED STATS FROM"一栏可能有多个,因为这个是通过读取/data/system/procstats下面的文件输出的,表示了从后面的日期到下一个"COMMITTED STATS FROM"指定的日期(如果没有,就是到dump的时间点)这段时间的概况;
  2."CURRENT STATS"一栏输出最近一次统计的情况;
  3."AGGREGATED OVER LAST 24 HOURS"一栏输出过去24小时的统计情况。不一定是完全的24小时,因为系统是通过查找/data/system/procstats下面的文件,从最新的往回读取,将总时间加起来满24小时的文件数据整合起来输出。
  4."AGGREGATED OVER LAST 3 HOURS"一栏输出过去3小时的统计情况。不一定是完全的3小时,因为系统是通过查找/data/system/procstats下面的文件,从最新的往回读取,将总时间加起来满3小时的文件数据整合起来输出。

adb shell dumpsys procstats -a

COMMITTED STATS FROM 日期{Process summary}{Run time Stats}{Memory usage}{PSS collection stats}
COMMITTED STATS FROM 日期{Process summary}{Run time Stats}{Memory usage}{PSS collection stats}
CURRENT STATS{System memory usage}{Per-Package Stats}{Multi-Package Common Processes}{Tracking associations}{Process summary}{Run time Stats}{Memory usage}{PSS collection stats}{Internal state}{Available pages by page size}
AGGREGATED OVER LAST 24 HOURS{System memory usage}{Per-Package Stats}{Multi-Package Common Processes}{Process summary}{Run time Stats}{Memory usage}{PSS collection stats}{Internal state}{Available pages by page size}
AGGREGATED OVER LAST 3 HOURS{System memory usage}{Per-Package Stats}{Multi-Package Common Processes}{Process summary}{Run time Stats}{Memory usage}{PSS collection stats}{Internal state}{Available pages by page size}

Process summary

  Process summary:统计了所有包的所在的进程的简要状态。如果需要更详细的所有包的信息,需要加上"–details"/"–full-details"/"-a"参数。以"com.qualcomm.qti.services.secureui:sui_service / u0a169 / v1"为例,以’/'为分隔符,从左到右分别时是进程名,UID,版本号。
  每个进程下面的每一行表示各种状态的数据,非cache状态就是Persistent/Top/Imp Fg/Imp Bg/Backup/Service/Service Rs/Receiver/Heavy Wgt这些状态。对于cache状态((Home)/(Last Act)/(Cch Act)/(Cch CAct)/(Cch Emty)),系统会单独进行计算,不计入TOTAL一栏。如果某个状态运行时间占比很小,会不列出这一行的数据,包括TOTAL一栏。
  百分比数字是指某个状态占总时间的百分比。例如“8.9MB-9.0MB-9.1MB/400KB-627KB-1.1MB/16MB-21MB-27MB over 4“表示“PSS数据/USS数据/RSS数据 over 样本数”。每个内存数据按‘-’作为分隔符,从左到右分别是最小值,平均值和最大值。

adb shell dumpsys procstats -a

Process summary:* com.qualcomm.qti.services.secureui:sui_service / u0a169 / v1:TOTAL: 100% (9.2MB-9.2MB-9.2MB/672KB-672KB-672KB/27MB-27MB-27MB over 1)Persistent: 100% (9.2MB-9.2MB-9.2MB/672KB-672KB-672KB/27MB-27MB-27MB over 1)* com.netease.cloudmusic:play / u0a222 / v7003010:TOTAL: 100% (97MB-97MB-97MB/62MB-62MB-62MB/112MB-112MB-112MB over 1)Imp Fg: 100% (97MB-97MB-97MB/62MB-62MB-62MB/112MB-112MB-112MB over 1)* .dataservices / 1001 / v1:TOTAL: 100% (39MB-39MB-39MB/1.5MB-1.5MB-1.5MB/32MB-32MB-32MB over 1)Persistent: 100% (39MB-39MB-39MB/1.5MB-1.5MB-1.5MB/32MB-32MB-32MB over 1)* com.android.ims.rcsservice / 1001 / v1:TOTAL: 100% (9.2MB-9.2MB-9.2MB/456KB-456KB-456KB/29MB-29MB-29MB over 1)Persistent: 100% (9.2MB-9.2MB-9.2MB/456KB-456KB-456KB/29MB-29MB-29MB over 1)* com.netease.cloudmusic / u0a222 / v7003010:TOTAL: 100% (237MB-237MB-237MB/176MB-176MB-176MB/231MB-231MB-231MB over 1)Imp Fg: 100% (237MB-237MB-237MB/176MB-176MB-176MB/231MB-231MB-231MB over 1)* com.google.android.gms / u0a124 / v203315046:TOTAL: 100% (111MB-111MB-111MB/75MB-75MB-75MB/135MB-135MB-135MB over 1)Imp Fg: 100% (111MB-111MB-111MB/75MB-75MB-75MB/135MB-135MB-135MB over 1)...* com.google.process.gservices / u0a124 / v30:(Last Act): 6.3% (9.0MB-9.0MB-9.0MB/3.9MB-3.9MB-3.9MB/38MB-38MB-38MB over 1)(Cached): 94%

PSS collection stats

  PSS collection stats:描述了统计时间等信息。Start time是开始统计的时间,Total uptime和Total elapsed time分别是统计不包括深度睡眠时间在内的持续的时间和包括深度睡眠时间在内的持续的时间,Aggregated over是表示输出信息来源于几份数据,一般是1。

adb shell dumpsys procstats -a

PSS collection stats:Internal Single: 54x over +704msInternal All Procs (Memory Change): 0x over 0Internal All Procs (Polling): 79x over +1s129msExternal: 0x over 0External Slow: 8x over +887msStart time: 2020-09-28 00:09:58Total uptime: +43m12s747msTotal elapsed time: +43m12s747ms (complete) libart.so

  Run time Stats:描述系统运行状态。如下所示:系统在熄屏/正常内存使用状况(SOff/Norm)下运行了39m2s685ms,而且当前还在该状态下运行(running);在熄屏/中度内存使用状况(SOff/Mod,输出内容省略了SOff)下运行了30s985ms;在亮屏/正常内存使用状况(SOn/Norm)下使用了9m18s303ms;在亮屏/中度内存使用状况(SOn/Mod)下使用了8s479ms;在亮屏/低内存使用状态(SOn/Low)下使用了2s319ms,在亮屏/紧急内存使用状态(SOn/Crit)下使用了
1s674ms,总计时间是49m4s445ms。该时间是从上一次提交(commit)的时间点到dump的时间点统计的,并不是开机的时间点统计的时间。

adb shell dumpsys procstats -a

Run time Stats:SOff/Norm: +39m2s685ms (running)Mod: +30s985msSOn/Norm: +9m18s303msMod: +8s479msLow: +2s319msCrit: +1s674msTOTAL: +49m4s445ms

  AGGREGATED OVER LAST 24 HOURS:描述了过去24小时所有包的所在的进程的简要状态。

adb shell dumpsys procstats

AGGREGATED OVER LAST 24 HOURS:* com.netease.cloudmusic:videoplay / u0a222 / v7003010:TOTAL: 100% (26MB-26MB-27MB/220KB-5.2MB-9.2MB/14MB-25MB-42MB over 7)Imp Fg: 0.62%Service: 99% (26MB-26MB-27MB/220KB-5.2MB-9.2MB/14MB-25MB-42MB over 7)* com.google.android.ext.services / u0a213 / v300900700:TOTAL: 100% (22MB-23MB-24MB/556KB-1.6MB-3.4MB/26MB-36MB-42MB over 8)Imp Fg: 100% (22MB-23MB-24MB/556KB-1.6MB-3.4MB/26MB-36MB-42MB over 8)

  AGGREGATED OVER LAST 3 HOURS:描述了过去3小时所有包的所在的进程的简要状态。

adb shell dumpsys procstats

AGGREGATED OVER LAST 3 HOURS:* com.google.android.apps.scone / u0a113 / v10629:TOTAL: 100% (13MB-14MB-15MB/1.9MB-3.2MB-5.1MB/26MB-34MB-41MB over 4)Imp Bg: 0.03%Service: 100% (13MB-14MB-15MB/1.9MB-3.2MB-5.1MB/26MB-34MB-41MB over 4)* com.google.android.ims / u0a141 / v30252713:TOTAL: 100% (17MB-19MB-20MB/2.9MB-5.9MB-8.2MB/25MB-35MB-43MB over 4)Imp Bg: 0.01%Service: 100% (17MB-19MB-20MB/2.9MB-5.9MB-8.2MB/25MB-35MB-43MB over 4)

Per-Package Stats

   Per-Package Stats:如果使用了"–details"/"–full-details"/“-a”参数,输出信息会以"Per-Package Stats"为开头将更加详细的信息展现出来:
  每个顶层*后面是包名/UID/版本号。以下面的com.google.android.youtube包名为例说明。每个包名最多可分为三个部分:Process,Service,Association。
  Process:后面是包含的进程名称:com.google.android.youtube。unique表示该进程是该包定义的非共用进程,multi表示该进程是共用进程,可以通过android:process属性配置运行在该进程。entries表示了进程的状态数量。com.google.android.youtube有6个entries,分别是SOff/Norm/Imp Bg,
SOff/Norm/Service,SOff/Norm/Receiver,SOff/Norm/ (Cch Emty),SOff/Mod/(Cch Emty),SOn/Norm/(Cch Emty)。输出信息在后面标注了这些状态的持续时间。
  PSS/USS表示内存的使用数据,entries表示状态数量(Youtube只有一个SOff/Norm/(Cch Emty)),后面信息是“PSS最小值-PSS平均值-PSS最大值/USS最小值-USS平均值-USS最大值/RSS最小值-RSS平均值-RSS最大值 over 样本数”。
  Cur time表示最近一次处于运行状态的持续时间。如果时间后面带有(running)的字眼,说明使用dump命令的时候该进程还处于运行状态。myID是一个标识唯一性的哈希值,mCommonProcess也是一个标识唯一性的哈希值。参考前面所述,如果进程是unique的,mCommonProcess和myID相同;如果进程是multi的,mCommonProcess是那个共用进程的唯一性标识值。mPackage是定义进程的包名,视进程是unique还是multi有不同的值。

  Service:后面是包含的服务名称:androidx.work.impl.background.systemjob.SystemJobService。Process表明服务所在的进程名称。"op count"统计了服务的各种行为计数。"Started op count"表示服务被显式启动(例如调用startService)或重启的次数(例如重启被杀的persistent服务)的次数;"Running op count"表示服务被运行起来的次数,“被运行”可以理解为服务从未启动状态变成显式启动(例如调用startService),绑定(例如调用bindService),执行生命周期(onCreate,onStart,onBind,onDestroy等)等状态的次数;"Bound op count"表示服务被绑定(例如调用bindService)的次数;“Executing op count"表示服务执行生命周期(onCreate,onStart,onBind,onDestroy等)等状态的次数。每个"op count"的下一行还显示了服务在这些"op count"动作期间,处于各种进程状态的时间。在当前的进程状态后面,输出信息会添加”(running)"标识。

  Association:后面是包里面的内容提供器或服务。Association描述了其他组件和这些内容提供器或服务的联系。Process是这些内容提供器或服务所处的进程。mNumActive是与这些内容提供器或服务有关系的活跃组件数量,如果发起联系的组件是活跃的,后面会带"(running)"标识。
  "<-“后面是和这些内容提供器或服务有关联的组件信息。以”<- com.google.android.gms/u0a154 (com.google.android.gms):“为例,意思是组件名称是com.google.android.gms,UID是u0a154,所在包名是com.google.android.gms。Total count表示了其他组件发生关联的次数,Active count表示其他组件发生关联且处于活跃状态的次数(活跃状态:进程状态比(Home)优先级高),后面的”(inline)“表明活跃状态只有一种,如果是”(multi-field)"表明活跃状态不只有一种。在下面的几行里,输出信息会列出这些状态的名字,持续时间,和持续时间占比。

adb shell dumpsys procstats -a

Per-Package Stats:* com.google.android.youtube / u0a186 / v1425573400:Process com.google.android.youtube (unique, 7 entries):SOff/Norm/  Receiver: +366ms(Cch Emty): +7m26s961msSOn/Norm/    Imp Fg: +2s994msImp Bg: +3m37s698msService: +1s300msReceiver: +10s509ms(Cch Emty): +24m48s420msTOTAL: +36m8s248msPSS/USS (3 entries):SOff/Norm/(Cch Emty): 49MB-49MB-49MB/42MB-42MB-42MB/0.00-0.00-0.00 over 1SOn/Norm/    Imp Bg: 50MB-50MB-50MB/42MB-42MB-42MB/0.00-0.00-0.00 over 4(Cch Emty): 44MB-47MB-50MB/38MB-41MB-43MB/0.00-0.00-0.00 over 12myID=4730da7 mCommonProcess=4730da7 mPackage=com.google.android.youtubeService com.google.firebase.iid.FirebaseInstanceIdService:Process: com.google.android.youtubeRunning op count 1:SOff/Norm: +12s256msSOn/Norm: +2m47s268msTOTAL: +2m59s524msBound op count 1:SOff/Norm: +12s256msSOn/Norm: +2m47s268msTOTAL: +2m59s524msExecuting op count 1:SOn/Norm: +426msTOTAL: +426msService com.google.android.apps.youtube.app.common.notification.FcmMessageListenerService:Process: com.google.android.youtubeRunning op count 1:SOff/Norm: +12s256msSOn/Norm: +2m47s297msTOTAL: +2m59s553msBound op count 1:SOff/Norm: +12s256msSOn/Norm: +2m47s297msTOTAL: +2m59s553msExecuting op count 1:SOn/Norm: +445msTOTAL: +445msService com.firebase.jobdispatcher.GooglePlayReceiver:Process: com.google.android.youtubeRunning op count 2:SOn/Norm: +3s717msTOTAL: +3s717msBound op count 2:SOn/Norm: +3s579msTOTAL: +3s579msExecuting op count 4:SOn/Norm: +1s838msTOTAL: +1s838msService com.google.android.apps.youtube.app.extensions.mediabrowser.impl.MainAppMediaBrowserService:Process: com.google.android.youtubeRunning op count 1:SOn/Norm: +1s511msTOTAL: +1s511msBound op count 1:SOn/Norm: +1s400msTOTAL: +1s400msExecuting op count 2:SOn/Norm: +1s297msTOTAL: +1s297msService com.google.android.libraries.youtube.account.AccountsChangedJobIntentService:Process: com.google.android.youtubeRunning op count 1:SOn/Norm: +2s621msTOTAL: +2s621msBound op count 1:SOn/Norm: +2s489msTOTAL: +2s489msExecuting op count 2:SOn/Norm: +161msTOTAL: +161msService com.google.android.apps.youtube.app.common.ads.AdIdListenerService:Process: com.google.android.youtubeRunning op count 2:SOn/Norm: +2s180msTOTAL: +2s180msBound op count 2:SOn/Norm: +2s102msTOTAL: +2s102msExecuting op count 4:SOn/Norm: +1s853msTOTAL: +1s853msService com.google.android.libraries.youtube.common.gcore.gcoreclient.gcm.impl.GcmTaskServiceDelegator:Process: com.google.android.youtubeRunning op count 7:SOn/Norm: +3m35s273msTOTAL: +3m35s273msBound op count 7:SOn/Norm: +3m34s266msTOTAL: +3m34s266msExecuting op count 14:SOn/Norm: +8s198msTOTAL: +8s198msService com.google.android.apps.youtube.app.application.system.LocaleUpdatedJobService:Process: com.google.android.youtubeRunning op count 1:SOn/Norm: +300msTOTAL: +300msBound op count 1:SOn/Norm: +278msTOTAL: +278msExecuting op count 2:SOn/Norm: +244msTOTAL: +244msAssociation com.firebase.jobdispatcher.GooglePlayReceiver:Process: com.google.android.youtubemNumActive=0<- com.google.android.gms.persistent/u0a154 (com.google.android.gms):Total count 2: Duration +3s312ms / 0.04%Active count 2 (inline):Imp Bg: Duration +3s312ms / 0.04%TOTAL: Duration +3s312ms / 0.04%Association com.google.android.apps.youtube.app.extensions.mediabrowser.impl.MainAppMediaBrowserService:Process: com.google.android.youtubemNumActive=0<- com.android.bluetooth/1002 (com.android.bluetooth):Total count 1: Duration +1s217ms / 0.02%Active count 1 (inline):Imp Fg: Duration +1s217ms / 0.02%TOTAL: Duration +1s217ms / 0.02%Association com.google.android.libraries.youtube.account.AccountsChangedJobIntentService:Process: com.google.android.youtubemNumActive=0<- system/1000 (android):Total count 1: Duration +2s486ms / 0.03%Active count 1 (inline):Imp Bg: Duration +2s486ms / 0.03%TOTAL: Duration +2s486ms / 0.03%Association com.google.android.apps.youtube.app.common.ads.AdIdListenerService:Process: com.google.android.youtubemNumActive=0<- com.google.android.gms/u0a154 (com.google.android.gms):Total count 2: Duration +1s808ms / 0.02%Active count 2 (inline):Imp Fg: Duration +1s808ms / 0.02%TOTAL: Duration +1s808ms / 0.02%Association com.google.android.libraries.youtube.common.gcore.gcoreclient.gcm.impl.GcmTaskServiceDelegator:Process: com.google.android.youtubemNumActive=0<- com.google.android.gms.persistent/u0a154 (com.google.android.gms):Total count 7: Duration +3m33s640ms / 2.9%Active count 7 (inline):Imp Bg: Duration +3m33s640ms / 2.9%TOTAL: Duration +3m33s640ms / 2.9%

Multi-Package Common Processes

  Multi-Package Common Processes:共用进程信息。这一栏列出了系统中所有共用进程的信息。

adb shell dumpsys procstats -a

Tracking associations:#0: com.coloros.persist.system/1000 <- system/1000:Tracking for: +2h0m45s511msComponent: com.coloros.securitypermission/.permission.dialog.PermissionDialogServiceProc state: ImpFg #120721Process: ProcessState{9a43f8d com.coloros.persist.system/1000 pkg=com.coloros.securitypermission (sub)}Active count 1: Duration +3m40s679ms / 100% (running)#1: com.coloros.persist.system/1000 <- com.android.systemui/u0a88:Tracking for: +2h0m44s543msComponent: com.coloros.notificationmanager/com.coloros.notification.NotificationCenterServiceProc state: ImpFg #120721Process: ProcessState{d79d07a com.coloros.persist.system/1000 pkg=com.coloros.notificationmanager (sub)}Active count 1: Duration +3m40s679ms / 100% (running)

Tracking associations

  Tracking associations:这一栏关注处于活跃状态的关联(Association)。处于活跃状态的意思是发起关联的组件进程状态比(Home)优先级高。系统在发起联系的组件变成活跃状态时,会跟踪(Track)这个联系,直到联系结束。
  以下面的#0为例。"com.coloros.persist.system/1000 <- system/1000"表示时system进程对com.coloros.persist.system进程发起了联系,注意这里用的名称都是共用进程(如果有的话)的名称。Tracking for后面是跟踪持续时间。Component是发起联系的组件名称,Proc state后面是活跃进程当前状态的名称和oomadj调整序列号,Process是发起联系的组件进程信息,Active count是处于活跃状态的次数,其后的Duration是处于活跃状态的总时间。有时候跟踪持续时间比处于活跃状态的总时间小,是因为曾经活跃的联系结束后来又建立了活跃的联系,导致活跃状态的累计时间比跟踪持续时间长。

adb shell dumpsys procstats -a

Tracking associations:#0: com.coloros.persist.system/1000 <- system/1000:Tracking for: +2h0m45s511msComponent: com.coloros.securitypermission/.permission.dialog.PermissionDialogServiceProc state: ImpFg #120721Process: ProcessState{9a43f8d com.coloros.persist.system/1000 pkg=com.coloros.securitypermission (sub)}Active count 1: Duration +3m40s679ms / 100% (running)#1: com.coloros.persist.system/1000 <- com.android.systemui/u0a88:Tracking for: +2h0m44s543msComponent: com.coloros.notificationmanager/com.coloros.notification.NotificationCenterServiceProc state: ImpFg #120721Process: ProcessState{d79d07a com.coloros.persist.system/1000 pkg=com.coloros.notificationmanager (sub)}Active count 1: Duration +3m40s679ms / 100% (running)

Internal state

  Internal state:表示当前的数据是否是记录在运行的系统中,如果是false,说明数据是从历史记录中得出来的。一般在CURRENT STATS标题下才为true,诸如AGGREGATED OVER LAST 24 HOURS之类的标题下为false。

adb shell dumpsys procstats -a

Internal state:mRunning=true

dumpsys procstats详解相关推荐

  1. Android dumpsys input详解

    (用华为P30带你看安卓) 简介:华为P30,Android 9.0(API 28) 如果你在从事安卓的开发,如果你苦于看不懂android 的输入逻辑,如果你想找到更好Android 调试工具,那么 ...

  2. dumpsys meminfo 详解

    源码基于:Android R 0. 前言 其实,很久以前在 android 查看内存使用情况 一文中已经分析过dumpsys meminfo,但最近在统计内存数据的时候发现怎么也对不上,所以重新分析了 ...

  3. dumpsys使用详解

    以下文章转自http://blog.csdn.net/anlegor/article/details/38583235,仅供学习需要 Dumpsys结构图: 实现方式: dumpsys的代码在mydr ...

  4. 详解安卓应用性能测试方法以及Android SDK中辅助测试的工具使用

    Android前端APP的性能测试一般针对以下几个方面:应用启动时间:CPU的占用:内存的占用:流量的耗用:电量的耗用:流畅度等.一般对App进行性能测试都需要借助不同的工具完成,本章节会向读者重点介 ...

  5. android doze模式源码分析,Android Doze模式启用和恢复详解

    从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...

  6. python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解 一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具 ...

  7. Android  Doze and App Standby模式详解

    Android  Doze and App Standby模式详解 来源:腾云阁 https://www.qcloud.com/community Optimizing for Doze and Ap ...

  8. android系统(63)---Jobscheduler运行机制详解

    android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...

  9. Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)

    简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...

最新文章

  1. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发
  2. 计算机类专业要不要练打字,计算机专业学生有必要专门花时间练习打字吗?
  3. WAS6集群部署及初步测试
  4. PaddleOCR——C++服务端部署Visual Studio 2019 环境下CMake 编译错误【无法打开输入文件paddle_fluid.lib】解决方案
  5. 【树链剖分】旅游(luogu 3976)
  6. 1006. 换个格式输出整数 (15)
  7. 数值分析实验四 最小二乘法曲线拟合
  8. abaqus 录制结果动画_录制和编辑动画 | Adobe Character Animator 教程
  9. 使用 Matlab 解决数学建模问题
  10. 要不要考公务员 | 进国企?
  11. WIN10下PyCharm+Anaconda+PyTorch-GPU+CUDA9.2+cuDNN7.2环境搭建
  12. 我的博客 http://aofengblog.blog.163.com/
  13. 改进杂草算法求解WSN节点分布优化问题
  14. AirDisk存宝 【S3和S6后面的USB口是用来干嘛的?有什么作用?】
  15. ad中电容用什么封装_何为无极性电容?是干什么用的?
  16. 涨势迅猛!拼多多跨境平台TEMU在美掀起流量风暴!
  17. Wcf实现IServiceBehavior拓展机制
  18. 思科VTP协议及其配置
  19. Android实现自定义圆角边框渐变
  20. 苹果电脑以及iPhone上截屏的方法介绍

热门文章

  1. 架构师技术领导力成长之路
  2. 正能量励志类语录短视频在抖音发展如何?现在入局需要注意什么?
  3. D. Not Adding (数论 gcd 筛法)
  4. Java面试前看看一篇就不怕问Spring框架了
  5. TensorRT+ int8官方论坛中有趣的讨论总结
  6. 非典逼出了淘宝和京东,新冠病毒能够逼出什么?
  7. linux进程suspended状态,linux进程后台运行
  8. 淘宝API 淘宝商品评论列表
  9. 公司图纸文档如何管理?图纸管理软件选择方案:
  10. 利用稳压模块设计电源电路(洞洞板手工做板)