内存管理-31-每进程内存统计-3-showmap

基于msm-5.4

一、简介

 

showmap 用于查看指定进程的内存映射明细。数据源来自 /proc/PID/smaps。其统计分为两部分:
(1) 每个子项各指标的大小。
(2) 所有子项指标和。

8295:/ # showmap $$
 virtual                     shared   shared  private  private                   Anon      Shmem     File       Shared   Private
    size      RSS      PSS    clean    dirty    clean    dirty     swap  swapPSS HugePages PmdMapped PmdMapped  Hugetlb  Hugetlb   #  object
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------- --------- --------- -------- -------- ---- ------------------------------
    1164      732       45      692        0        0       40        0        0         0         0         0        0        0    4 /apex/com.android.runtime/bin/linker64
    1024      896       43      856        0        0       40        0        0         0         0         0        0        0    4 /apex/com.android.runtime/lib64/bionic/libc.so
      12       12        4        8        0        0        4        0        0         0         0         0        0        0    3 /apex/com.android.runtime/lib64/bionic/libdl.so
     220       72        8       64        0        0        8        0        0         0         0         0        0        0    4 /apex/com.android.runtime/lib64/bionic/libm.so
     256        8        0        0        8        0        0        0        0         0         0         0        0        0    2 /dev/__properties__/properties_serial
     176      176        0        0      176        0        0        0        0         0         0         0        0        0    2 /dev/__properties__/property_info
     128        4        0        0        4        0        0        0        0         0         0         0        0        0    1 /dev/__properties__/u:object_r:arm64_memtag_prop:s0
     128       16        0        0       16        0        0        0        0         0         0         0        0        0    1 /dev/__properties__/u:object_r:build_prop:s0
     256        8        0        0        8        0        0        0        0         0         0         0        0        0    2 /dev/__properties__/u:object_r:debug_prop:s0
     128        4        0        0        4        0        0        0        0         0         0         0        0        0    1 /dev/__properties__/u:object_r:heapprofd_prop:s0
     128        4        0        0        4        0        0        0        0         0         0         0        0        0    1 /dev/__properties__/u:object_r:libc_debug_prop:s0
     128        4        0        0        4        0        0        0        0         0         0         0        0        0    1 /dev/__properties__/u:object_r:vendor_socket_hook_prop:s0
     128        4        0        0        4        0        0        0        0         0         0         0        0        0    1 /dev/__properties__/u:object_r:vndk_prop:s0
     300      300      107      288        0        0       12        0        0         0         0         0        0        0    4 /system/bin/sh
     684      656       34      624        0        0       32        0        0         0         0         0        0        0    4 /system/lib64/libc++.so
      36       36        8       28        0        0        8        0        0         0         0         0        0        0    4 /system/lib64/libnetd_client.so
    2212      108      108        0        0        0      108        0        0         0         0         0        0        0    9 [anon:.bss]
      32       32       32        0        0        0       32        0        0         0         0         0        0        0    2 [anon:System property context nodes]
       8        8        8        0        0        0        8        0        0         0         0         0        0        0    2 [anon:arc4random data]
       8        8        8        0        0        0        8        0        0         0         0         0        0        0    2 [anon:atexit handlers]
     104      104      104        0        0        0      104        0        0         0         0         0        0        0    7 [anon:bionic_alloc_small_objects]
 2097152        8        8        0        0        0        8        0        0         0         0         0        0        0    5 [anon:cfi shadow]
    8192      160      160        0        0        0      160        0        0         0         0         0        0        0    1 [anon:libc_malloc]
    2000       24       24        0        0        0       24        0        0         0         0         0        0        0    4 [anon:linker_alloc]
      16       12       12        0        0        0       12        0        0         0         0         0        0        0    1 [anon:stack_and_tls:main]
      32        0        0        0        0        0        0        0        0         0         0         0        0        0    1 [anon:thread signal stack]
   43064        0        0        0        0        0        0        0        0         0         0         0        0        0   11 [anon]
     132       36       36        0        0        0       36        0        0         0         0         0        0        0    1 [stack]
       4        4        0        4        0        0        0        0        0         0         0         0        0        0    1 [vdso]
       4        4        0        4        0        0        0        0        0         0         0         0        0        0    1 [vvar]
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------- --------- --------- -------- -------- ---- ------------------------------
 virtual                     shared   shared  private  private                   Anon      Shmem     File       Shared   Private
    size      RSS      PSS    clean    dirty    clean    dirty     swap  swapPSS HugePages PmdMapped PmdMapped  Hugetlb  Hugetlb   #  object
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------- --------- --------- -------- -------- ---- ------------------------------
 2157856     3440      749     2568      228        0      644        0        0         0         0         0        0        0   87 TOTAL

注: 这里看到的 "virtual size" 2GB 级别主要是虚拟地址空间预留,不是实际吃掉了 2GB RAM。

1. 对 TOTAL 部分逐项解读:

(1) virtual size = 2157856 KB(约 2.06 GB)
含义:虚拟地址空间总映射大小。是虚拟内存。

(2) RSS = 3440 KB(约 3.36 MB)
含义:当前驻留在物理内存的页总量,包含共享库。这个是物理内存。此shell进程实际在 RAM 中只有几 MB。

(3) PSS = 749 KB
含义:按共享页分摊后的物理占用。

(4) shared clean = 2568 KB
含义:共享且干净页,多为 so/可执行文件映射。是物理内存。可回收性较好,且会被多个进程共享。

(5) shared dirty = 228 KB
含义:共享脏页。是物理内存。

(6) private clean = 0 KB
含义:私有干净页。是物理内存。

(7) private dirty = 644 KB
含义:私有脏页。是物理内存。这部分通常是最“实打实”的进程成本。

swap = 0,swapPSS = 0
(8) 没有被换出到 zram/swap。说明当前内存压力较低。这两个成员分别表示分摊和不分摊的值。


2. 容易误解的几行说明:

[anon:cfi shadow] virtual 2097152 KB,RSS 8 KB
解读:预留了 2GB 虚拟空间,但只实际触达了 8KB。几乎不占物理内存。

[anon] virtual 43064 KB,RSS 0 KB
解读:映射了虚拟区间,但还没真正分配物理页(按需分配)。####

[anon:.bss] virtual 2212 KB,RSS/PSS 108 KB
解读:也是“虚拟大、实际小”的典型。

针对这份进程的一句话结论:
虚拟地址空间约 2.06GB。但是实际驻留 RAM 约 3.36MB。分摊后仅约 0.73MB。属于非常轻量的 shell 进程,当前不存在内存压力。

 

posted on 2024-08-26 21:55  Hello-World3  阅读(85)  评论(0)    收藏  举报

导航