备案怎么关闭网站吗,网站开发项目费用预算,wordpress主题之家,找苏州网站建设0. 前言
ramdump是指某个时刻系统或者子系统发生crash等异常#xff0c;系统将内存中的数据通过一定的方式保存下来#xff0c;相当于一个系统内存快照#xff0c;用以开发者离线分析系统异常问题。
ramdump 工具中有很多内存统计的脚本#xff0c;本文逐一剖析内存相关的…0. 前言
ramdump是指某个时刻系统或者子系统发生crash等异常系统将内存中的数据通过一定的方式保存下来相当于一个系统内存快照用以开发者离线分析系统异常问题。
ramdump 工具中有很多内存统计的脚本本文逐一剖析内存相关的脚本涉及脚本如下
脚本名称dump文件名称说明memusage.pymemory.txt统计内存 total memory、free memory、slab、shmem 以及每个进程的 rss、swap、adj 信息memstat.pymem_stat.txt统计总的内存使用情况包含total、free、slab、cached、vmalloc、zram compressedothers中包含 pgtables、kernel stack 等信息ion_buffer_parse.py ionbuffer.txt ionproc.txt total_dma_heap.txt 统计db_list 中所有 dma_buf 的size、expr_name等信息。 总的 dma_buf 大小记录在 total_dma_heap.txt 文件中 vmalloc.pyvmalloc.txt统计 vmallocinfoslabinfo.py 1. memusage.py
该脚本统计的信息会写到 memory.txt 文件中。
来看下统计了哪些信息
Total RAM: 2,716,180kB
Total free memory: 54,324kB(2.0%)
Slab reclaimable: 69,868kB(2.6%)
Slab unreclaimable: 195,680kB(7.2%)
Total Slab memory: 265,548kB(9.8%)
Total SHMEM (PAGECACHE): 90,300kB(3.3%)
Total SHMEM (SWAP): 212kB(0.0%)TOP 3 swapped SHMEM files are:
Address_space 0xffffff803ec32d30 Allocated 13 pages
file name: /dev/ashmem/Trans ImageData
Address_space 0xffffff800b2ac460 Allocated 6 pages
file name: /dev/ashmem/Trans ImageData
Address_space 0xffffff803ec37960 Allocated 6 pages
file name: /dev/ashmem/Trans ImageDataTask name PID RSS in kB SWAP in kB ADJ
m.ohos.launcher 1433 283,520(10.4%) 12,676(0.5%) 400
m.ohos.systemui 1406 165,088(6.1%) 25,992(1.0%) -800
com.ohos.callui 10310 176,892(6.5%) 0(0.0%) 1
m.ohos.contacts 7746 139,204(5.1%) 12(0.0%) 400
com.ohos.camera 17189 124,844(4.6%) 0(0.0%) 0
com.ohos.mms 13071 115,536(4.3%) 12(0.0%) 400
foundation 1027 110,608(4.1%) 3,224(0.1%) -1000
ard:inputMethod 1465 106,788(3.9%) 6,464(0.2%) 400
appspawn 277 110,432(4.1%) 0(0.0%) -1000
字段名称说明Total RAM统计全局变量 _totalram_pagesTotal free memory统计NR_FREE_PAGES以及占total 的百分比Slab reclaimable统计NR_SLAB_RECLAIMABLE以及占 total 的百分比Kernel5.10 以上的版本字段名称有所变化Slab unreclaimable统计 NR_SLAB_UNRECLAIMABLE以及占 total 的百分比Kernel5.10 以上的版本字段名称有所变化Total Slab memory统计总的 slab 内存上面两者之和Total SHMEM (PAGECACHE)统计NR_SHMEM以及占 total 的百分比Total SHMEM (SWAP)统计 shmem 进入 swap 的内存这些信息都保存在 shmem_swaplist 中TOP 3 swapped SHMEM files上面统计信息之后会将 TOP 3 swapped SHMEM files 列举出来所有进程信息 统计进程的 name、PID、rss、swap 和 adj其中 rss 和 swap统计值来源于 mm_struct 中 mm_rss_stat 结构体rss anon_rss file_rss shmem_rss 2. memstat.py
该脚本统计的信息会写到 mem_stat.txt 文件中。
来看下统计了哪些信息
Total RAM : 2652 MB
Free memory: : 53 MBTotal Slab memory: : 259 MB
Total DMA memory : 54 MB
KGSL : 0 MB
ZRAM compressed : 4 MB
vmalloc : 85 MB
Others : 1904 MB
Cached : 570 MBTotal Unaccounted Memory : 293 MB
字段名称说明Total RAM统计全局变量 _totalram_pagesFree memory统计NR_FREE_PAGES以及占total 的百分比Total Slab memory统计总的 slab 内存NR_SLAB_RECLAIMABLE NR_SLAB_UNRECLAIMABLETotal DMA memory统计所有dma-buf 的内存大小。对于 kernel 5.10 及以上的版本该数据读取的是total_dma_heap.txt 文件该文件于 ion_buffer_parse.py 解析写入dma-buf 都统计在全局变量 db_list 中详细查看下文 ion_buffer_parse.py 剖析KGSL未知ZRAM compressed统计 ZRAM 压缩的内存大小vmalloc统计通过vmalloc 申请的内存大小。对于 vmalloc 分配的内存都会被记录到全局变量nr_vmalloc_pages 中详细可以查看《内核参数vmallocinfo》一文others统计 NR_ANON_MAPPED NR_FILE_PAGES NR_PAGETABLE NR_KERNEL_STACK_KBCached统计 NR_FILE_PAGESTotal Unaccounted Memory没有被统计的内存大小 3. ion_buffer_parse.py
该脚本统计的信息会写到 ionbuffer.txt、ionproc.txt、total_dma_heap.txt 文件中。
3.1 ionbuffer.txt
来看下统计了哪些数据
*****Parsing dma buf info for ion leak debugging*****File_addr REF Name Size Exp Heap Size in KB
v.v (struct file *)0xffffff8031154140 9 None 0x555000 system-uncached None (5460 KB)
v.v (struct file *)0xffffff8031154500 10 None 0x555000 system-uncached None (5460 KB)
v.v (struct file *)0xffffff807a006640 6 None 0x555000 system-uncached None (5460 KB)
v.v (struct file *)0xffffff80a23b3540 6 None 0x555000 system-uncached None (5460 KB)
v.v (struct file *)0xffffff807cfb92c0 8 None 0x555000 system-uncached None (5460 KB)
v.v (struct file *)0xffffff808fc8ea00 8 None 0x4f4000 system-uncached None (5072 KB)
v.v (struct file *)0xffffff80b59cab40 8 None 0x4f4000 system-uncached None (5072 KB)
v.v (struct file *)0xffffff805cb97540 3 None 0x48f000 system None (4668 KB)
轮询 db_list 中所有的 dma-buf所有的size 都会统计到 total_dma_heap最终的总的 dma-buf 的内存会记录到 total_dma_heap.txt 中。
字段名称说明File_addrdma_buf 所对应的文件的 struct file 地址REF该文件被引用的次数Namedma_buf 的name一般使用 dma_buf_set_name() 函数配置默认不会设置所以为NoneSizedma_buf 所代表的内存大小十六进制Expdma_buf 的 exp_name同 dma_heap 的nameHeapdma_heap 的name上面 txt 显示为None是因为脚本代码有问题Size in KB 同Size只不过转换成了KB 单位 3.2 ionproc.txt 来看下统计了哪些数据
*****Parsing dma proc info for ion leak debugging*****render_service (PID 828) size (KB): 43600
Name Size Size in KB Time Alive(sec) (struct file *)
system-uncached 0x555000 5460 0 0xffffff80a23b3540
system-uncached 0x555000 5460 0 0xffffff8031154500
system-uncached 0x555000 5460 0 0xffffff8031154140
system-uncached 0x555000 5460 0 0xffffff807a006640
system-uncached 0x555000 5460 0 0xffffff807cfb92c0
system-uncached 0x4f4000 5072 0 0xffffff80b59cab40
system-uncached 0x4f4000 5072 0 0xffffff808fc8ea00
system-uncached 0xe4000 912 0 0xffffff8061202280
system-uncached 0xe4000 912 0 0xffffff801f506000 ...m.ohos.launcher (PID 1433) size (KB): 16380
Name Size Size in KB Time Alive(sec) (struct file *)
system-uncached 0x555000 5460 0 0xffffff807cfb92c0
system-uncached 0x555000 5460 0 0xffffff807a006640
system-uncached 0x555000 5460 0 0xffffff80a23b3540
该文件统计的是使用 dma-buf的进程的相关信息每一个 proc 都会显示进程名、PID 以及使用的dma-buf 的总大小。
通常该文件统计的数据与ionbuffer.txt 配合使用分析某些dma_buf 异常。
字段名称说明Nameslab_buf 的exp_nameSizeslab_buf 所占用的内存大小十六进制Size in KB同上转换成KB 的单位Time Alive(sec)slab_buf 的存活时长一般用于 struct dma_buf 中存在ktime 的成员除此都为0(struct file *)同 ionbuffer.txt 中代表 dma_buf 对应的文件的 struct file 地址 3.3 total_dma_heap.txt
来看下统计了哪些数据
Total dma memory: 54MB
该数据统计所有dma_buf 的总大小在分析 ionbuffer.txt 的时候看到所有db_list 中的 dma_buf 的size 都会累计到变量total_dma_heap最终记录到 total_dma_heap.txt 文件中。 4. vmalloc.py
该脚本统计的信息会写到 vmalloc.txt 文件中。
来看下统计了哪些信息
Memory mapped region allocated by VmallocVM_STRUCT ADDRESS_RANGE SIZE PHYS_ADDR CALLER Flag
v.v (struct vmap_area)0xffffff8081917400 ffffffc000000000-ffffffc000002000 2000 0 bpf_jit_binary_alloc0x0xac vmalloc pages1
v.v (struct vmap_area)0xffffff80b4230c00 ffffffc000002000-ffffffc000004000 2000 0 bpf_jit_binary_alloc0x0xac vmalloc pages1
v.v (struct vmap_area)0xffffff80a33d8180 ffffffc000004000-ffffffc000006000 2000 0 bpf_jit_binary_alloc0x0xac vmalloc pages1
v.v (struct vmap_area)0xffffff80a33d8480 ffffffc000006000-ffffffc000008000 2000 0 bpf_jit_binary_alloc0x0xac vmalloc pages1
v.v (struct vmap_area)0xffffff807a1bb500 ffffffc000008000-ffffffc00000a000 2000 0 bpf_jit_binary_alloc0x0xac vmalloc pages1
v.v (struct vmap_area)0xffffff8025419a80 ffffffc00000a000-ffffffc00000c000 2000 0 bpf_jit_binary_alloc0x0xac vmalloc pages1
v.v (struct vmap_area)0xffffff808d27c180 ffffffc009820000-ffffffc00997a000 15a000 0 load_module0x0xbb0 vmalloc pages345
v.v (struct vmap_area)0xffffff808d39b300 ffffffc00997a000-ffffffc009997000 1d000 0 load_module0x0xbb0 vmalloc pages28
v.v (struct vmap_area)0xffffff808d5b8300 ffffffc009997000-ffffffc0099b6000 1f000 0 load_module0x0xbb0 vmalloc pages30
v.v (struct vmap_area)0xffffff808da97c80 ffffffc0099b6000-ffffffc00a2cb000 915000 0 load_module0x0xbb0 vmalloc pages2324
v.v (struct vmap_area)0xffffff808d30ca00 ffffffc00a2cb000-ffffffc00a2d1000 6000 0 load_module0x0xbb0 vmalloc pages5
v.v (struct vmap_area)0xffffff808c688200 ffffffc00a2d1000-ffffffc00a311000 40000 0 load_module0x0xbb0 vmalloc pages63
v.v (struct vmap_area)0xffffff809621e780 ffffffc00a311000-ffffffc00a6dc000 3cb000 0 load_module0x0xbb0 vmalloc pages970
字段名称说明VM_STRUCT从kmalloc 中分配的struct vm_struct 的地址ADDRESS_RANGEvm_struct 代表的vmalloc 子区域的内存空间差值就是SIZESIZEvm_struct 代表的vmalloc 子区域的内存大小十六进制PHYS_ADDR代表的vmalloc 子区域对应的物理地址起始地址一般出现于vmap 或 ioremapCALLER调用vmalloc 的函数Flagvmalloc 的属性详细查看《内核参数vmallocinfo》一文
更详细的 vmalloc 内存管理信息可以查看《vmalloc 详解》一文和《内核参数vmallocinfo》一文。 5. slabinfo.py