1. procrank
procrank是/system/bin/下的一个命令,在整机开发的时候,使用该命令查看应用进程的内存情况很方便。但是这个命令正常在debug/eng模式编译的时候才有,如果你是做第三方应用开发,如果可以root的手机的话,通过往该手机中push该命令,应该也可以使用该命令。
1.1 使用
procrank: invalid option -- -
Usage: procrank [ -W ] [ -v | -r | -p | -u | -s | -h ]
-v Sort by VSS.
-r Sort by RSS.
-p Sort by PSS.
-u Sort by USS.
-s Sort by swap.
(Default sort order is PSS.)
-R Reverse sort order (default is descending).
-c Only show cached (storage backed) pages
-C Only show non-cached (ram/swap backed) pages
-k Only show pages collapsed by KSM
-w Display statistics for working set only.
-W Reset working set of all processes.
-o Show and sort by oom score against lowmemorykiller thresholds.
-h Display this help screen.
执行procrank命令输出如下
tv_e1_dtmb:/ # procrank
PID Vss Rss Pss Uss Swap PSwap USwap ZSwap cmdline
4468 1587980K 313180K 215418K 205688K 1324K 47K 0K 13K com.gitvdemo.video
2128 1533820K 204476K 90260K 68764K 1232K 47K 4K 13K system_server
2058 112440K 40748K 32512K 32164K 0K 0K 0K 0K media.swcodec
2481 1152268K 117304K 28008K 21424K 1312K 47K 0K 13K com.android.systemui
4388 1105472K 112648K 23850K 16680K 1360K 49K 0K 13K com.android.permissioncontroller
2834 1074888K 98192K 22351K 18632K 1380K 49K 0K 13K com.android.providers.media.module
......
......
1850 23440K 2240K 414K 368K 468K 468K 468K 129K /system/bin/iptables-restore
1244 25312K 2880K 386K 160K 1268K 1268K 1268K 352K /system/bin/init
------ ------ ------ ------ ------ ------ ------
764353K 613104K 69832K 32836K 31408K 9120K TOTAL
ZRAM: 9532K physical used for 33280K in swap (102396K total swap)
RAM: 1323096K total, 54184K free, 14248K buffers, 323028K cached, 5504K shmem, 137268K slab
部分参数含义如下:
1、Vss
Vss与PS的VSIZE相同是单个进程全部可访问的地址空间
其大小包括可能还尚未在内存中驻留的部分。比如地址空间已经被 malloc 分配,但是还没有实际写入。
对于确定单个进程实际内存使用大小, VSS 用处不大。
2、Rss
RSS是单个进程实际占用的内存大小。
RSS易被误导的原因在于, 它包括了该进程所使用的所有共享库的全部内存大小。对于单个共享库, 尽管无论多少个进程使用,实际该共享库只会被装入内存一次。
对于单个进程的内存使用大小, RSS 不是一个精确的描述。
3、Pss
PSS 不同于RSS,它只是按比例包含其所使用的共享库大小。
例如, 三个进程使用同一个占用 30 内存页的共享库。 对于三个进程中的任何一个,PSS 将只包括 10 个内存页。
PSS 是一个非常有用的数字,因为系统中全部进程以整体的方式被统计, 对于系统中的整体内存使用是一个很好的描述。
如果一个进程被终止, 其PSS 中所使用的共享库大小将会重新按比例分配给剩下的仍在运行并且仍在使用该共享库的进程。
此种计算方式有轻微的误差,因为当某个进程中止的时候,PSS没有精确的表示被返还给整个系统的内存大小。
4、Uss
USS 是单个进程的全部私有内存大小。亦即全部被该进程独占的内存大小。
USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。
如果进程被终止, USS 就是实际被返还给系统的内存大小。
USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。
小结
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
2. librank
2.1 使用
Usage: librank [ -P | -L ] [ -v | -r | -p | -u | -s | -h ]
Sort options:
-v Sort processes by VSS.
-r Sort processes by RSS.
-p Sort processes by PSS.
-u Sort processes by USS.
-s Sort processes by swap.
(Default sort order is PSS.)
-a Show all mappings, including stack, heap and anon.
-P /path Limit libraries displayed to those in path.
-R Reverse sort order (default is descending).
-m [r][w][x] Only list pages that exactly match permissions
-c Only show cached (storage backed) pages
-C Only show non-cached (ram/swap backed) pages
-k Only show pages collapsed by KSM
-f [raw][json][csv] Print output in the specified format.
(Default format is raw text.)
-h Display this help screen.
RSStot VSS RSS PSS USS Swap Name/PID
142377K [anon:scudo:primary]
50432K 35604K 34280K 34232K 160K com.gitvdemo.video [4468]
26880K 15004K 13474K 13364K 180K system_server [2128]
28160K 12252K 11615K 11612K 520K /system/bin/surfaceflinger [1895]
23040K 11236K 9709K 9608K 168K com.eswin.tv.launcher.lite [2912]
21504K 9432K 7590K 7508K 240K com.android.providers.media.module [2834]
22016K 7144K 7144K 7144K 0K librank [22726]
36352K 6564K 6408K 6408K 0K /system/bin/mediaserver [2016]
18688K 6416K 4633K 4544K 204K com.android.systemui [2481]
17152K 4648K 2464K 2332K 268K com.android.tv.settings [2649]
16384K 4412K 2408K 2324K 272K com.android.networkstack.process [2581]
11520K 2096K 1818K 1808K 184K /system/bin/logd [1523]
16384K 4016K 1588K 1432K 292K com.android.statementservice [3219]
16896K 3948K 1563K 1452K 308K com.android.inputmethod.leanback [3236]
16128K 3904K 1551K 1436K 296K com.android.providers.tv [3140]
14848K 1176K 1052K 1052K 940K /system/bin/init [1]
16128K 3576K 957K 816K 336K com.android.dynsystem:dynsystem [3010]
..........
10496K 768K 576K 564K 44K /system/bin/netd [1844]
10240K 616K 576K 564K 0K /system/bin/TVInputServer [1967]
9472K 328K 308K 304K 456K /system/bin/keystore2 [1804]
评论 (0)