跳至主要內容

性能分析

Mr.WenYue大约 2 分钟

性能分析

查看进程

命令:

adb shell ps

输出示例:

USER     PID   PPID  VSIZE  RSS     WCHAN    PC        NAME
root      1     0     8904   788   ffffffff 00000000 S /init
root      2     0     0      0     ffffffff 00000000 S kthreadd
...
u0_a71    7779  5926  1538748 48896 ffffffff 00000000 S com.sohu.inputmethod.sogou:classic
u0_a58    7963  5926  1561916 59568 ffffffff 00000000 S org.mazhuang.boottimemeasure
...
shell     8750  217   10640  740   00000000 b6f28340 R ps

各列含义:

列名含义
USER所属用户
PID进程 ID
PPID父进程 ID
NAME进程名

查看实时资源占用情况

命令:

adb shell top

输出示例:

User 0%, System 6%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 21 + Idle 280 + IOW 0 + IRQ 0 + SIRQ 3 = 307

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
 8763  0   3% R     1  10640K   1064K  fg shell    top
  131  0   3% S     1      0K      0K  fg root     dhd_dpc
 6144  0   0% S   115 1682004K 115916K  fg system   system_server
  132  0   0% S     1      0K      0K  fg root     dhd_rxf
 1731  0   0% S     6  20288K    788K  fg root     /system/bin/mpdecision
  217  0   0% S     6  18008K    356K  fg shell    /sbin/adbd
 ...
 7779  2   0% S    19 1538748K  48896K  bg u0_a71   com.sohu.inputmethod.sogou:classic
 7963  0   0% S    18 1561916K  59568K  fg u0_a58   org.mazhuang.boottimemeasure
 ...

各列含义:

列名含义
PID进程 ID
PR优先级
CPU%当前瞬间占用 CPU 百分比
S进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
#THR线程数
VSSVirtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSSResident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY调度策略优先级,SP_BACKGROUND/SPFOREGROUND
UID进程所有者的用户 ID
NAME进程名

top 命令还支持一些命令行参数,详细用法如下:

Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
    -m num  最多显示多少个进程
    -n num  刷新多少次后退出
    -d num  刷新时间间隔(单位秒,默认值 5-s col  按某列排序(可用 col 值:cpu, vss, rss, thr)
    -t      显示线程信息
    -h      显示帮助文档
eg:查看com.tencent相关的进程线程的实时cpu占用
$ top -n 3 -s cpu -t |grep "com.tencent"

查看某个进程mmap情况

# pid 需要替换成当前进程号
$ adb shell cat /proc/pid/maps
# 如果有权限问题,可以以run-as用户执行
$ adb shell run-as packageName
$ cat /proc/pid/maps

查看某进程的status文件

# 如果有权限问题。可以使用run-as用户执行
# pid 替换成对应进程的id
$ cat /proc/pid/status
# 例如下面是微信进程的status信息
Name:	com.tencent.mm
State:	S (sleeping)
Tgid:	25713
Pid:	25713
PPid:	502
TracerPid:	0
Uid:	10083	10083	10083	10083
Gid:	10083	10083	10083	10083
FDSize:	512
Groups:	1015 1028 3001 3002 3003 9997 50083
VmPeak:	 2340232 kB
VmSize:	 2319324 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	  250884 kB
VmRSS:	  244704 kB
VmData:	  521528 kB
VmStk:	    8192 kB
VmExe:	      12 kB
VmLib:	  259588 kB
VmPTE:	    1608 kB
VmSwap:	       0 kB
Threads:	179
SigQ:	0/13835
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000001204
SigIgn:	0000000000001000
SigCgt:	00000002000084f8
CapInh:	0000000000000000
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	0000000000000000
Cpus_allowed:	ff
Cpus_allowed_list:	0-7
voluntary_ctxt_switches:	5277
nonvoluntary_ctxt_switches:	882