内存管理-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) 收藏 举报
浙公网安备 33010602011771号