android 内存信息统计工具procrank使用与原理
使用
通过命令 procrank -h 能看到所有这个工具的用法信息
generic_x86_64:/ # procrank -h
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的main方法里面也能看到,当参数中有 -h的时候就会打印上述信息
可以根据需要用上述命令 来查看当前所有进程的内存使用情况
使用举例 procrank -u
generic_x86_64:/ # procrank -u
PID Vss Rss Pss Uss cmdline
1863 3325828K 233368K 98567K 84624K system_server
2097 3283956K 187440K 60338K 48156K com.android.systemui
1667 966960K 130772K 54419K 22472K zygote
2634 3242532K 147648K 37330K 21292K com.android.launcher3
2091 3217144K 127580K 27626K 20316K com.android.phone
2414 3201528K 111052K 22949K 17428K com.android.dialer
2004 3172876K 103988K 15269K 10672K com.android.inputmethod.latin
2950 3170912K 104740K 15287K 10048K com.android.messaging
2113 3207736K 115988K 19166K 9364K com.android.settings
1574 52160K 19508K 10858K 9092K /system/bin/audioserver
1681 41696K 16196K 9424K 8048K media.codec
2061 1039548K 59172K 26882K 7644K webview_zygote
2470 3163628K 100908K 11981K 7424K android.process.acore
2855 3170208K 95484K 11571K 7040K com.android.email
1552 27000K 12144K 7721K 6988K /vendor/bin/hw/android.hardware.audio@2.0-service
1666 3082800K 138316K 25366K 6456K zygote64
2460 3166432K 90292K 9864K 6416K com.android.cellbroadcastreceiver
2990 3165604K 84208K 8875K 5984K com.android.packageinstaller
1665 89256K 16800K 7090K 5920K /system/bin/surfaceflinger
2625 3166320K 99628K 10647K 5860K android.process.media
2053 19432K 10552K 6048K 5800K /vendor/bin/hw/wpa_supplicant
3014 3163792K 88424K 8767K 5440K com.android.traceur
2306 3167968K 92560K 9610K 5316K com.android.deskclock
2810 3165152K 86992K 8742K 4960K com.android.contacts
1674 2170252K 18272K 6584K 4660K media.extractor
2825 3160312K 90488K 7864K 4332K com.android.providers.calendar
2922 3160484K 82912K 7105K 4192K com.android.managedprovisioning
2787 3167312K 91064K 8144K 4156K com.android.calendar
1554 25332K 11996K 5260K 3900K /vendor/bin/hw/android.hardware.camera.provider@2.4-service
1683 23664K 8036K 3966K 3844K /vendor/bin/hw/rild
1668 37808K 13420K 5238K 3764K /system/bin/cameraserver
1676 63608K 16796K 6375K 3712K /system/bin/mediaserver
2578 3160896K 84956K 6719K 3624K com.android.printspooler
1569 18936K 7936K 3709K 3552K /vendor/bin/hw/android.hardware.wifi@1.0-service
2237 3158368K 86924K 6393K 2896K android.ext.services
1696 66452K 10836K 3502K 2744K /vendor/bin/hw/android.hardware.graphics.composer@2.1-service
1496 18220K 5328K 2700K 2640K /system/bin/logd
2569 3159608K 82016K 5661K 2632K com.android.se
2720 3159176K 81848K 5608K 2628K com.android.keychain
2972 3157260K 81076K 5421K 2512K com.android.onetimeinitializer
1677 34120K 8756K 2964K 2508K /system/bin/netd
2658 3158324K 81080K 5523K 2468K com.android.smspush
1501 23836K 8388K 2754K 2344K /system/bin/vold
1675 2137836K 12248K 3468K 2292K media.metrics
1560 19772K 7180K 2520K 2228K /vendor/bin/hw/android.hardware.gnss@1.0-service
1672 21728K 8228K 2631K 2216K /system/bin/keystore
1690 17932K 5692K 2082K 1968K /system/bin/perfprofd
1558 17608K 7404K 2327K 1924K /vendor/bin/hw/android.hardware.drm@1.1-service.clearkey
1581 19564K 1876K 1790K 1784K /system/bin/adbd
1671 21096K 6124K 1907K 1744K /system/bin/installd
1669 28904K 11016K 3195K 1724K /system/bin/drmserver
1813 12856K 5424K 1896K 1700K /vendor/bin/hostapd_nohidl
1680 17028K 6608K 1876K 1688K /system/bin/wificond
1500 14880K 6136K 1809K 1640K /vendor/bin/hw/android.hardware.keymaster@3.0-service
1557 13888K 6804K 2379K 1612K /vendor/bin/hw/android.hardware.drm@1.0-service
1553 13436K 5620K 1650K 1536K /vendor/bin/hw/android.hardware.broadcastradio@1.1-service
1498 16756K 6424K 1941K 1516K /system/bin/hwservicemanager
1679 21020K 6484K 1745K 1452K /system/bin/storaged
1551 23228K 7584K 1856K 1388K /system/bin/vr_hwc
1718 9608K 3748K 1391K 1356K /system/bin/ip6tables-restore
1 19140K 3732K 1971K 1352K /init
1611 5740K 1344K 1304K 1304K /system/bin/mdnsd
1670 18104K 5988K 1411K 1252K /system/bin/incidentd
1717 9592K 3544K 1259K 1224K /system/bin/iptables-restore
1689 17600K 7236K 1575K 1212K /system/bin/gatekeeperd
3164 15148K 3632K 1139K 1100K procrank
1559 15536K 6440K 1451K 1100K /vendor/bin/hw/android.hardware.gatekeeper@1.0-service
1555 12368K 6228K 1796K 1100K /vendor/bin/hw/android.hardware.cas@1.0-service
1566 12992K 5272K 1207K 1092K /vendor/bin/hw/android.hardware.health@2.0-service.goldfish
1577 15032K 5656K 1236K 1064K /system/bin/thermalserviced
1568 15968K 5348K 1174K 1052K /vendor/bin/hw/android.hardware.sensors@1.0-service
1673 18808K 7472K 2059K 1016K /system/bin/mediadrmserver
1693 13944K 5296K 1133K 1012K /vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service
1556 16200K 5376K 1232K 992K /vendor/bin/hw/android.hardware.configstore@1.1-service
1561 26180K 5832K 1165K 948K /vendor/bin/hw/android.hardware.graphics.allocator@2.0-service
1567 12840K 5024K 1059K 948K /vendor/bin/hw/android.hardware.power@1.1-service.ranchu
1497 11040K 4028K 901K 812K /system/bin/servicemanager
1550 12076K 4648K 972K 752K /system/bin/healthd
1499 11792K 4388K 877K 752K /vendor/bin/vndservicemanager
1147 7080K 2820K 1270K 732K /sbin/ueventd
1762 10556K 4036K 770K 700K /vendor/bin/netmgr
1549 11792K 4396K 767K 668K /system/bin/hw/android.hidl.allocator@1.0-service
1583 11296K 3924K 881K 628K /system/bin/traced_probes
1691 9440K 3084K 659K 624K /system/bin/tombstoned
1145 7208K 2684K 1133K 596K /init
1810 10176K 3864K 658K 588K /vendor/bin/ipv6proxy
1792 9924K 3812K 649K 584K /vendor/bin/dhcpclient
1580 9076K 3288K 759K 580K /system/bin/sh
1815 10048K 3724K 644K 580K /vendor/bin/dhcpserver
3101 9076K 3308K 752K 576K /system/bin/sh
1752 9908K 1260K 569K 560K createns
1582 11296K 3768K 811K 560K /system/bin/traced
1575 9668K 3120K 570K 532K /system/bin/lmkd
1146 6952K 2340K 911K 448K /init
------ ------ ------
699120K 464676K TOTAL
RAM: 2047096K total, 821972K free, 7856K buffers, 823640K cached, 2464K shmem, 60440K slab
说明
在说 procrank命令的原理之前首先需要知道一些 基本linux知识
因为 android 内核是基于 linux内核的所以这块知识和linux是共通的
proc目录
在android设备中,有一个proc这个目录,这个目录基本记录了所有进程的一些基本信息,包括内存,fd,状态,以及所有的pid目录等等
因为这地方只说的是 android procrank相关的 所有,这里着重说一下下面几个文件
1 proc/kpagecount
该文件包含了每一个页面映射次数,使用64位表示,通过PFN索引
2 /proc/kpageflags
该文件记录了每一个页面的flags,使用64位表示,通过PFN索引
至于所有的flags信息在 (kernel-4.9/inclued/uapi/linux/kernel-page-flags.h)这个文件中申明
#define KPF_LOCKED 0
#define KPF_ERROR 1
#define KPF_REFERENCED 2
#define KPF_UPTODATE 3
#define KPF_DIRTY 4
#define KPF_LRU 5
#define KPF_ACTIVE 6
#define KPF_SLAB 7
#define KPF_WRITEBACK 8
#define KPF_RECLAIM 9
#define KPF_BUDDY 10
/* 11-20: new additions in 2.6.31 */
#define KPF_MMAP 11
#define KPF_ANON 12
#define KPF_SWAPCACHE 13
#define KPF_SWAPBACKED 14
#define KPF_COMPOUND_HEAD 15
#define KPF_COMPOUND_TAIL 16
#define KPF_HUGE 17
#define KPF_UNEVICTABLE 18
#define KPF_HWPOISON 19
#define KPF_NOPAGE 20
#define KPF_KSM 21
#define KPF_THP 22
#define KPF_BALLOON 23
#define KPF_ZERO_PAGE 24
#define KPF_IDLE 25
3 /proc/kpagecgroup
只有在配置CONFIG_MEMCG时,才包含该文件。该文件包含一个通过PFN索引的64位值,表明该页所归属的memory cgroup
proc/pid目录
这个目录下是当前进程下的一些信息主要看下面几个文件
该链接是针对pagemap的说明,具体想了解请点击.
1 /proc/pid/pagemap
这个文件使得用户进程可以获得每个虚拟内存页和实际内存的映射关系。对于每一个虚拟页
- Bits 0-54 page frame number (PFN) if present
- Bits 0-4 swap type if swapped
- Bits 5-54 swap offset if swapped
- Bit 55 pte is soft-dirty (see Documentation/vm/soft-dirty.txt)
- Bit 56 page exclusively mapped (since 4.2)
- Bits 57-60 zero
- Bit 61 page is file-page or shared-anon (since 3.5)
- Bit 62 page swapped
- Bit 63 page present
2 /proc/pid/maps
这个文件很大 是所有的当前进程的虚拟内存信息地址信息,包括地址以及地址中的信息
因为内容比较多,这地方就 帖一小部分了 这个文件可以直接用cat看不需要特殊手段读取
generic_x86_64:/proc/3223 # cat maps
12c00000-2ac00000 rw-p 00000000 00:05 10179 /dev/ashmem/dalvik-main space (region space) (deleted)
401d3000-4023c000 rw-p 00000000 00:05 10871 /dev/ashmem/dalvik-large object space allocation (deleted)
40473000-40478000 rw-p 00000000 00:05 10853 /dev/ashmem/dalvik-large object space allocation (deleted)
404c2000-404c9000 rw-p 00000000 00:05 10864 /dev/ashmem/dalvik-large object space allocation (deleted)
404d4000-404d8000 rw-p 00000000 00:05 10896 /dev/ashmem/dalvik-large object space allocation (deleted)
405ed000-405f2000 rw-p 00000000 00:05 28588 /dev/ashmem/dalvik-large object space allocation (deleted)
406a8000-406ae000 rw-p 00000000 00:05 10867 /dev/ashmem/dalvik-large object space allocation (deleted)
407f8000-407fd000 rw-p 00000000 00:05 28589 /dev/ashmem/dalvik-large object space allocation (deleted)
40895000-4089a000 rw-p 00000000 00:05 29350 /dev/ashmem/dalvik-large object space allocation (deleted)
408d2000-408dd000 rw-p 00000000 00:05 10854 /dev/ashmem/dalvik-large object space allocation (deleted)
408dd000-408e2000 rw-p 00000000 00:05 10861 /dev/ashmem/dalvik-large object space allocation (deleted)
408e2000-408e6000 rw-p 00000000 00:05 10863 /dev/ashmem/dalvik-large object space allocation (deleted)
40b09000-40b10000 rw-p 00000000 00:05 10856 /dev/ashmem/dalvik-large object space allocation (deleted)
40b88000-40b8e000 rw-p 00000000 00:05 10857 /dev/ashmem/dalvik-large object space allocation (deleted)
40cb6000-40cbd000 rw-p 00000000 00:05 10866 /dev/ashmem/dalvik-large object space allocation (deleted)
40e18000-40e1d000 rw-p 00000000 00:05 28568 /dev/ashmem/dalvik-large object space allocation (deleted)
41577000-41581000 rw-p 00000000 00:05 10870 /dev/ashmem/dalvik-large object space allocation (deleted)
4161e000-4162b000 rw-p 00000000 00:05 10874 /dev/ashmem/dalvik-large object space allocation (deleted)
计算流程与原理
原理
在system/extras/procrank/procrank.cpp
这个文件是procrank命令的main函数所在的地方,具体实现我们需要看这个文件,直接从main函数看起
因为main代码比较多这地方就不贴相关的代码了
首先贴一部分调用时序
这地方简单列举一下主要的调用的函数,并说明
1: pm_kernel_pids
找到proc目录下的所有pid目录
找到所有的pid之后就是遍历所有的pid信息,然后依次执行
2: pm_memusage_zero
3: pm_memusage_pswap_init_handle
4: pm_process_create 针对pm_process_create 下面会说明
这几步走完之后它会根据传的参数判断下面的执行过程
switch (ws) {
case WS_OFF:
error = pm_process_usage_flags(proc, &procs[i].usage, flags_mask,
required_flags);
break;
case WS_ONLY:
error = pm_process_workingset(proc, &procs[i].usage, 0);
break;
case WS_RESET:
error = pm_process_workingset(proc, NULL, 1);
break;
}
针对ws的值的操作为遍历执行的参数信息
for (arg = 1; arg < argc; arg++) {
if (!strcmp(argv[arg], "-v")) { compfn = &sort_by_vss; continue; }
if (!strcmp(argv[arg], "-r")) { compfn = &sort_by_rss; continue; }
if (!strcmp(argv[arg], "-p")) { compfn = &sort_by_pss; continue; }
if (!strcmp(argv[arg], "-u")) { compfn = &sort_by_uss; continue; }
if (!strcmp(argv[arg], "-s")) { compfn = &sort_by_swap; continue; }
if (!strcmp(argv[arg], "-o")) { compfn = &sort_by_oomadj; oomadj = true; continue; }
if (!strcmp(argv[arg], "-c")) { required_flags = 0; flags_mask = KPF_SWAPBACKED; continue; }
if (!strcmp(argv[arg], "-C")) { required_flags = flags_mask = KPF_SWAPBACKED; continue; }
if (!strcmp(argv[arg], "-k")) { required_flags = flags_mask = KPF_KSM; continue; }
if (!strcmp(argv[arg], "-w")) { ws = WS_ONLY; continue; }
if (!strcmp(argv[arg], "-W")) { ws = WS_RESET; continue; }
if (!strcmp(argv[arg], "-R")) { order *= -1; continue; }
if (!strcmp(argv[arg], "-h")) { usage(argv[0]); exit(0); }
fprintf(stderr, "Invalid argument \"%s\".\n", argv[arg]);
usage(argv[0]);
exit(EXIT_FAILURE);
}
默认情况下ws = WS_OFF 只有在 -w 或者 -W的时候ws才会更改,这种情况下
Display statistics for working set only
通过pm_process_create函数创建该进程的统计信息结构
int pm_process_create(pm_kernel_t *ker, pid_t pid, pm_process_t **proc_out) {
pm_process_t *proc;
char filename[MAX_FILENAME];
int error;
if (!ker || !proc_out)
return -1;
proc = calloc(1, sizeof(*proc));
if (!proc)
return errno;
proc->ker = ker;
proc->pid = pid;
error = snprintf(filename, MAX_FILENAME, "/proc/%d/pagemap", pid);
if (error < 0 || error >= MAX_FILENAME) {
error = (error < 0) ? (errno) : (-1);
free(proc);
return error;
}
proc->pagemap_fd = open(filename, O_RDONLY);
if (proc->pagemap_fd < 0) {
error = errno;
free(proc);
return error;
}
error = read_maps(proc);
if (error) {
free(proc);
return error;
}
*proc_out = proc;
return 0;
}
接下来就是
通过前面的对VSS、RSS、PSS、USS说明可以知道:
VSS,是计算所有的页,无论该页是否被映射到物理内存都会被记录
RSS,只计算映射到物理内存或swap的页
PSS,在RSS基础上,若一个页被映射n次,只计算n分之一
USS,在RSS基础上,只计算被映射一次的页
计算流程
下面计算VSS、RSS、PSS、USS的代码
1、打开/proc/pid/maps获取进程的多个映射区间。
2、对于某一段映射,从/proc/pid/pagemap中的获取映页的映射数组。
在ws == OFF的情况下
首先调用 pm_process_usage_flags
会根据当前进程的maps信息 使用 pm_map_pagemap 函数(最终调用pm_process_pagemap_range函数)
int pm_process_pagemap_range(pm_process_t *proc,
unsigned long low, unsigned long high,
uint64_t **range_out, size_t *len) {
int firstpage, numpages;
uint64_t *range;
off_t off;
int error;
/*参数检查*/
if (!proc || (low >= high) || !range_out || !len)
return -1;
/*根据low获取第一页序号以及页数*/
firstpage = low / proc->ker->pagesize;
numpages = (high - low) / proc->ker->pagesize;
range = malloc(numpages * sizeof(uint64_t));
if (!range)
return errno;
/*在/proc/pid/pagemap中偏移firstpage*sizeof(u64_t)*/
off = lseek(proc->pagemap_fd, firstpage * sizeof(uint64_t), SEEK_SET);
if (off == (off_t)-1) {
error = errno;
free(range);
return error;
}
/*读取numpages*sizeof(u64_t)到分配的内存中,并返回*/
error = read(proc->pagemap_fd, (char*)range, numpages * sizeof(uint64_t));
if (error == 0) {
/* EOF, mapping is not in userspace mapping range (probably vectors) */
*len = 0;
free(range);
*range_out = NULL;
return 0;
} else if (error < 0 || (error > 0 && error < (int)(numpages * sizeof(uint64_t)))) {
error = (error < 0) ? errno : -1;
free(range);
return error;
}
*range_out = range;
*len = numpages;
return 0;
}
3 根据前面得到的pagemap数组,从/proc/kpagecount中获取page的map次数,计算uss、rss、vss、pss
int pm_map_usage_flags(pm_map_t *map, pm_memusage_t *usage_out,
uint64_t flags_mask, uint64_t required_flags) {
uint64_t *pagemap;
size_t len, i;
uint64_t count;
pm_memusage_t usage;
int error;
if (!map || !usage_out)
return -1;
error = pm_map_pagemap(map, &pagemap, &len);
if (error) return error;
pm_memusage_zero(&usage);
pm_memusage_pswap_init_handle(&usage, usage_out->p_swap);
for (i = 0; i < len; i++) {
/*VSS无论该页是否映射,都需要计算*/
usage.vss += map->proc->ker->pagesize;
/*如果该页未map或者swap,则无需计算*/
if (!PM_PAGEMAP_PRESENT(pagemap[i]))
continue;
if (!PM_PAGEMAP_SWAPPED(pagemap[i])) {
/*非swap页*/
if (flags_mask) {
uint64_t flags;
error = pm_kernel_flags(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]),
&flags);
if (error) goto out;
if ((flags & flags_mask) != required_flags)
continue;
}
/*根据PFN,从/proc/kpagecount中获取页的映射次数*/
error = pm_kernel_count(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]),
&count);
if (error) goto out;
/*rss 计算所有映射到物理内存的页*/
usage.rss += (count >= 1) ? map->proc->ker->pagesize : (0);
/*pss 对于多次映射的页,按比例分配*/
usage.pss += (count >= 1) ? (map->proc->ker->pagesize / count) : (0);
/*uss 只计算映射一次的页*/
usage.uss += (count == 1) ? (map->proc->ker->pagesize) : (0);
} else {
/*swap页面*/
usage.swap += map->proc->ker->pagesize;
}
}
memcpy(usage_out, &usage, sizeof(usage));
error = 0;
out:
free(pagemap);
return error;
}
从/proc/kpagecount中读取映射次数的代码页比较简单,lseek到偏移位置,然后直接读取u64即可。
int pm_kernel_count(pm_kernel_t *ker, unsigned long pfn, uint64_t *count_out) {
off_t off;
if (!ker || !count_out)
return -1;
off = lseek(ker->kpagecount_fd, pfn * sizeof(uint64_t), SEEK_SET);
if (off == (off_t)-1)
return errno;
if (read(ker->kpagecount_fd, count_out, sizeof(uint64_t)) <
(ssize_t)sizeof(uint64_t))
return errno;
return 0;
}
4、重复步骤2和3,将所有映射区间的结果相加,即得到进程的VSS、RSS、PSS、USS。
以上就是使用procrank命令之后代码的执行过程,具体内容参考了
https://blog.csdn.net/sunao2002002/article/details/80069663
https://github.com/torvalds/linux/blob/v4.9/Documentation/vm/pagemap.txt
另外拓展 procmem以及meminfo
针对所有进程的内存使用信息 可以使用procrank
但是 要分析单个进程的进程信息
可以使用 procmem pid 以及 dumpsys meminfo pid
使用举例
dumpsys meminfo pid/包名 信息
generic_x86_64:/proc # dumpsys meminfo 4330
Applications Memory Usage (in Kilobytes):
Uptime: 22993615 Realtime: 22993615
** MEMINFO in pid 4330 [android.process.media] **
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 1695 1664 0 0 6144 2912 3231
Dalvik Heap 1366 1364 0 0 1646 1134 512
Dalvik Other 280 280 0 0
Stack 36 36 0 0
Ashmem 0 0 0 0
Other dev 4 0 4 0
.so mmap 703 96 0 0
.jar mmap 0 0 0 0
.apk mmap 448 0 416 0
.dex mmap 608 8 92 0
.oat mmap 408 0 0 0
.art mmap 1539 1108 144 0
Other mmap 165 4 0 0
Unknown 677 676 0 0
TOTAL 7929 5236 656 0 7790 4046 3743
App Summary
Pss(KB)
------
Java Heap: 2616
Native Heap: 1664
Code: 612
Stack: 36
Graphics: 0
Private Other: 964
System: 2037
TOTAL: 7929 TOTAL SWAP PSS: 0
Objects
Views: 0 ViewRootImpl: 0
AppContexts: 5 Activities: 0
Assets: 5 AssetManagers: 0
Local Binders: 9 Proxy Binders: 22
Parcel memory: 6 Parcel count: 26
Death Recipients: 0 OpenSSL Sockets: 0
WebViews: 0
SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 117
procmem
generic_x86_64:/proc # procmem 4330
Vss Rss Pss Uss ShCl ShDi PrCl PrDi Name
------- ------- ------- ------- ------- ------- ------- -------
512K 124K 124K 124K 0K 0K 124K 0K /dev/ashmem/dalvik-main space (region space) (deleted)
768K 0K 0K 0K 0K 0K 0K 0K /dev/ashmem/dalvik-main space (region space) (deleted)
1536K 860K 860K 860K 0K 0K 860K 0K /dev/ashmem/dalvik-main space (region space) (deleted)
5888K 0K 0K 0K 0K 0K 0K 0K /dev/ashmem/dalvik-main space (region space) (deleted)
187904K 0K 0K 0K 0K 0K 0K 0K /dev/ashmem/dalvik-main space (region space) (deleted)
2920K 2920K 220K 180K 192K 2548K 180K 0K /data/dalvik-cache/arm64/system@framework@boot.art
88K 88K 1K 0K 0K 88K 0K 0K /data/dalvik-cache/arm64/system@framework@boot.art
1236K 1236K 227K 212K 40K 984K 212K 0K /data/dalvik-cache/arm64/system@framework@boot-core-libart.art
72K 72K 1K 0K 0K 72K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-core-libart.art
252K 252K 35K 32K 28K 192K 32K 0K /data/dalvik-cache/arm64/system@framework@boot-conscrypt.art
12K 12K 0K 0K 0K 12K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-conscrypt.art
240K 240K 3K 0K 44K 196K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-okhttp.art
12K 12K 0K 0K 0K 12K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-okhttp.art
408K 408K 21K 16K 44K 348K 16K 0K /data/dalvik-cache/arm64/system@framework@boot-bouncycastle.art
28K 28K 0K 0K 0K 28K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-bouncycastle.art
388K 388K 5K 0K 44K 344K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-apache-xml.art
28K 28K 0K 0K 0K 28K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-apache-xml.art
272K 272K 4K 0K 44K 228K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-ext.art
44K 44K 0K 0K 0K 44K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-ext.art
10908K 10908K 837K 684K 368K 9856K 684K 0K /data/dalvik-cache/arm64/system@framework@boot-framework.art
384K 384K 5K 0K 0K 384K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-framework.art
1148K 764K 24K 4K 44K 716K 4K 0K /data/dalvik-cache/arm64/system@framework@boot-telephony-common.art
72K 72K 1K 0K 0K 72K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-telephony-common.art
60K 60K 0K 0K 36K 24K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-voip-common.art
8K 8K 0K 0K 0K 8K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-voip-common.art
108K 108K 1K 0K 28K 80K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-ims-common.art
8K 8K 0K 0K 0K 8K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-ims-common.art
12K 12K 0K 0K 12K 0K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.hidl.base-V1.0-java.art
24K 24K 0K 0K 20K 4K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.hidl.manager-V1.0-java.art
8K 8K 0K 0K 0K 8K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.hidl.manager-V1.0-java.art
4K 4K 0K 0K 4K 0K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-framework-oahl-backward-compatibility.art
4K 4K 0K 0K 0K 4K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-framework-oahl-backward-compatibility.art
16K 16K 0K 0K 16K 0K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.test.base.art
8K 8K 0K 0K 0K 8K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.test.base.art
68K 64K 1K 0K 36K 28K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.car.art
4K 4K 0K 0K 0K 4K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-android.car.art
8K 8K 0K 0K 8K 0K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-iauto.utility.dtlib.art
4K 4K 0K 0K 0K 4K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-iauto.utility.dtlib.art
12K 12K 0K 0K 12K 0K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-com.iauto.sysctrlmanager.art
4K 4K 0K 0K 0K 4K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-com.iauto.sysctrlmanager.art
4K 4K 0K 0K 4K 0K 0K 0K /data/dalvik-cache/arm64/system@framework@boot-com.iauto.theme.art
.
.
.
.
等等
------- ------- ------- ------- ------- ------- ------- -------
3572200K 94052K 7941K 5744K 10340K 77968K 6524K 464K TOTAL
以上