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代码比较多这地方就不贴相关的代码了

首先贴一部分调用时序

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

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值