内存管理-31-相关文件节点汇总

基于msm-5.4 hqx+linux

一、proc目录下文件节点

1. zoneinfo

打印的是全局变量 vm_node_stat[] 的值;打印 struct zone 结构的部分成员,如 水位 _watermark,zone->vm_stat[],zone的 spanned_pages/present_pages/managed_pages/lowmem_reserve[]等,打印每个zone的 zone->pageset 中的部分成员等。


2. meminfo

统计系统各种内存(物理内存、虚拟内存、页缓存) 等信息的统计结果,如可用物理内存总量 _totalram_pages, vm_zone_stat[] 的部分成员,vm_zone_stat[] 的部分成员,pcpu_nr_pages() 的返回值, totalcma_pages 的值等。

 

3. slabinfo

# cat /proc/slabinfo
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
f2fs_xattr_entry-254:16      0     60    536   30    4 : tunables    0    0    0 : slabdata      2      2      0
dm_verity_fec_buffers      8     14   4384    7    8 : tunables    0    0    0 : slabdata      2      2      0
dm_bufio_buffer        1     33    488   33    4 : tunables    0    0    0 : slabdata      1      1      0
kmalloc-8k           227    229  24576    1    8 : tunables    0    0    0 : slabdata    229    229      0
...


4. vmallocinfo

# cat /proc/vmallocinfo
0xffffffc000000000-0xffffffc000002000    8192 bpf_jit_binary_alloc+0x80/0x1e8 pages=1 vmalloc
0xffffffc032400000-0xffffffc032800000 4194304 vm_map_ram
0xffffffc030348000-0xffffffc03034d000   20480 dup_task_struct+0x50/0x17c pages=4 vmalloc
...

查看vmalloc分配信息,vmalloc()分配内存物理地址是不连续的,但是可以分配大块内存。


5. vmstat

打印的各个条目的字符串描述来自 vmstat_text[], 各条目的值分别来自完整的全局数组 vm_zone_stat[]、完整的全局数组 vm_node_stat[]、全局变量 struct wb_domain global_wb_domain 的部分成员、以每个cpu为单位收集 完整的per_cpu(vm_event_states, cpu) 的和。


6. iomem

# cat /proc/iomem
1b032000-1b032fff : 1b032000.uart uart@1b032000
1c090000-1c090fff : 1c090000.virtio_console
088e5000-088e511f : 88e5000.hsphy hsusb_phy_base
1cd00000-1cdfffff : 1cd00000.virtio-i2c
aee46000-aee7ffff : reserved
12ec51000-22ec4efff : System RAM
...


7. ioports

cat为空


8. pagetypeinfo

打印 pageblock_order 和 pageblock_nr_pages 的值, 打印函数 pagetypeinfo_show();遍历各个order,遍历各个迁移类型,打印 zone->free_area[order]->free_list[MIGRATE_TYPES] 链表上元素的个数,是个二维矩阵,打印函数是 pagetypeinfo_showfree_print();打印每种迁移类型对应的页块(单位4M)的个数,打印函数是 pagetypeinfo_showblockcount_print().

 

9. partitions

# cat /proc/partitions
major minor  #blocks  name
   1        0       8192 ram0
   1        1       8192 ram1
 254        0   10485760 vda
 254       16   96466572 vdb
 252        0    5341724 dm-0
 252        1     346024 dm-1
 ......


10. kpagecgroup

cat显示乱码


11. kpagecount

cat显示乱码


12. kpageflags

cat显示乱码


13. swaps

au8295:/# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/block/zram0                        partition       6291452 383344  32758

通过"cat /proc/swaps"或者"swapon -s"命令获知系统包含的所有swap areas。相关命令 swapon swapoff。

 

14. pressure/memory

# cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0


15. buddyinfo

遍历每个order打印 zone->free_area[order].nr_free 的值,order从0--10,见 frag_show_print()。

 

二、/proc/sys/vm目录下文件节点

1. admin_reserve_kbytes

可读可写,cat出来值为 8192。

作用:用于配置管理员保留的内存大小,以字节为单位。这些内存页不会被分配给普通用户。


2. block_dump

可读可写,cat出来值为 0。

作用:用于启用或禁用块设备操作的跟踪日志记录。设置一个非零值,可以打开block I/O调试。将记录块设备操作的详细信息到内核的日志缓冲区中,包括读取和写入操作。

启用 block_dump 可以帮助诊断和调试系统中的块设备问题。通过分析跟踪记录,可以确定块设备的访问模式、频率和性能瓶颈。这对于性能优化和故障排除可能非常有用。

注意,启用 block_dump 会产生大量的日志信息,可能会对系统性能产生负面影响。因此,建议仅在需要跟踪块设备操作时启用它。在Documentation/laptops/laptop-mode.txt可以查看更多关于block I/O调试的内容。


3. compact_memory

只可写。

该参数用于启用或禁用内存的同区压缩(memory compaction)。同区压缩是一种特定的内存管理策略,通过重新组织内存页来减少内存碎片化,提高内存利用率。
可能的取值为 0(表示禁用)或 1(表示启用)。用户可以通过修改这个参数来控制系统是否使用同区压缩来优化内存布局。


4. compact_unevictable_allowed

可读可写,cat出来值为 1。

这个参数用于配置是否允许压缩不可被驱逐的内存(unevictable memory)。不可被驱逐的内存是一种无法从内存中移除的内存,例如被锁定的内存或内核数据结构等。
设置为 1 表示允许压缩不可被驱逐的内存,设置为 0 则表示禁止压缩这部分内存。用户可以通过修改这个参数来调整系统对不可被驱逐内存的处理策略。


5. dirty_background_bytes

可读可写,cat出来值为 0。

该参数定义了当系统中脏页达到此阈值时,后台写回进程(内核线程)将开始写回脏页到磁盘。单位为字节,这个参数用于控制在后台写回脏页时可用内存的阈值。


6. dirty_background_ratio

可读可写,cat出来值为 5。

与 dirty_background_bytes 类似,这个参数定义了后台写回进程开始写回脏页的内存使用比率阈值。以系统可用内存的百分比来表示。


7. dirty_bytes

可读可写,cat出来值为 0。

这个参数定义了在脏页被强制回写之前脏页的数量上限。当脏页的数量超过此阈值时,内核将启动写回脏页的操作。


8. dirty_expire_centisecs

可读可写,cat出来值为 200。

该参数设置了脏页被认为"过期"的时间,单位为100毫秒,过期的脏页将被写回到磁盘。当脏页在内存中存在时间超过这个阈值时,它将被认为是过期的。


9. dirty_ratio

可读可写,cat出来值为 20。

定义了内存中可以被脏页占用的最大比例。当这个比例被超过时,进程将被阻塞,以等待脏页写回磁盘。


10. dirty_writeback_centisecs

可读可写,cat出来值为 500。

用于配置脏页刷新到磁盘的时间间隔,单位为百分之一秒。


11. dirtytime_expire_seconds

可读可写,cat出来值为 43200。

这个参数定义了脏页存在时间的上限,在这个时间之后,脏页将被写回到磁盘。


12. drop_caches

只可写。

该参数并非用于配置脏页,而是用于清空文件系统缓存和页缓存,以释放内存。可以通过在这个文件中写入不同的数值来执行不同的清理操作。

echo 1 > /proc/sys/vm/drop_caches //释放页缓存
echo 2 > /proc/sys/vm/drop_caches //释放dentries和inodes
echo 3 > /proc/sys/vm/drop_caches //释放所有缓存


13. extfrag_threshold

可读可写,cat出来值为 500。

这个参数用于控制系统分配连续内存页面的策略。当内存分配请求被满足时,内核会尽量提供连续的物理内存页。“extfrag_threshold” 就是设置内核认为内存碎片过大的阈值。


14. extra_free_kbytes

可读可写,cat出来值为 54675。

此参数通过增加每个区域的最小水位线和低水位线之间的差距,告诉虚拟机保持额外的可用内存量。patch: https://lkml.org/lkml/2013/2/17/210


15. kswapd_threads

可读可写,cat出来值为 1。


16. laptop_mode

可读可写,cat出来值为 0。

这个参数是针对笔记本电脑而设计的,用于控制系统在省电模式下的行为。当启用 “laptop_mode” 时,系统会尽量降低功耗,延长电池续航时间。

此参数只会影响直接内存回收,只有两个值,为0表示允许直接内存回收对匿名页lru链表中的页进行回写操作,并且允许直接内存回收唤醒flush内核线程,非0表示直接内存回收不会对匿名页lru链表中的页进行回写操作。


17. legacy_va_layout

可读可写,cat出来值为 0。

这个参数用于启用或禁用内核在用户态地址空间中使用传统的 “VA = PA + PAGE_OFFSET” 布局。通常情况下,不需要手动修改此参数。


18. lowmem_reserve_ratio

可读可写,cat出来值为 32 0。

这个参数决定了系统在低内存条件下要保留多少内存以供内核使用。默认情况下,内核会保留一部分内存,以便能够应对低内存压力和系统任务的需要。


19. max_map_count

可读可写,cat出来值为 65530。

这个参数限制了每个进程能够创建的内存映射区(vma)的数量。通过限制这个数量,可以提高系统的安全性和稳定性。


20. min_free_kbytes

可读可写,cat出来值为 14881。

该参数用于设置最小空闲内存的阈值。它表示内核将尽量保留的空闲内存量,以确保系统具有足够的可用内存来应对突发的内存需求。以页的数量为单位。当内存使用量接近 min_free_kbytes 时,内核会避免分配更多的内存页面,以保留一定的空闲内存。这样做的目的是避免系统因为内存不足而陷入频繁的页面置换操作,以及在处理突发内存需求时能够有一些缓冲空间。


21. mmap_min_addr

可读可写,cat出来值为 32768。

这个参数用于限制被非特权进程用于 mmap() 系统调用的地址范围。它指定了 mmap() 返回的映射地址的最小值,防止用户空间进程随意映射低地址空间。


22. mmap_rnd_bits

可读可写,cat出来值为 24。

该参数指定了 mmap 映射地址的位数。


23. mmap_rnd_compat_bits

可读可写,cat出来值为 16。

指定了与其他架构上的二进制兼容时的位数,和上面参数一起控制 mmap 映射地址的随机化。


24. oom_dump_tasks

可读可写,cat出来值为 1。

这是一个控制开关,用于启用或禁用当系统内存不足时将 oom_score_adj 值为负的任务信息写入到 /proc/sys/kernel/panic_on_oom 中。当启用时,内核会将这些进程的信息记录下来,并可用于诊断系统内存用尽的情况。


25. oom_kill_allocating_task

可读可写,cat出来值为 0。

此参数控制是否允许内核在 Out-Of-Memory 条件下终止分配内存的进程。当启用时,内核会尝试终止正在分配内存的进程以尝试释放内存。当禁用时,内核会尝试终止具有最高 OOM 分数的进程。


26. overcommit_kbytes

可读可写,cat出来值为 0。

这是一个用于控制过度承诺内存的参数,用于指定系统允许的过度承诺的总内存(以 kBytes 为单位)。


27. overcommit_memory

可读可写,cat出来值为 1。

该参数用于控制内存过度承诺策略。可取值为0 1 2:

OVERCOMMIT_GUESS (0): 这个选项是默认的设置。在这种模式下,内核会根据系统中可用的物理内存和已分配的虚拟内存的大小来判断是否允许超额分配。例如,当虚拟内存的总量超过物理内存加上交换
空间的大小时,会禁止超额分配。这种模式下的行为通常是比较合理且安全的。

OVERCOMMIT_ALWAYS (1): 这个选项表示内核始终允许超额分配。不论物理内存和已分配的虚拟内存之间是否有足够的空间,内核都会允许进程进行超额分配。这样做的话,即使系统实际内存不足,也不会阻止进程进行内存分配操作。但是,当实际可用内存超出物理内存大小时,可能会导致应用程序在使用超额内存时发生页错误(page fault)。

OVERCOMMIT_NEVER (2): 这个选项表示内核不允许超额分配。当进程请求内存超过操作系统实际可用的物理内存大小时,内核会阻止超额分配,并抛出 Out-Of-Memory (OOM) 错误,使进程能够适当地处理内存不足的情况。


28. overcommit_ratio

可读可写,cat出来值为 50。

这个参数用于指定内存过度承诺的比率。它表示了系统内存大小与所允许的过度承诺内存大小之间的比率。


29. page-cluster

可读可写,cat出来值为 3。

这个参数用于设置内存页合并的阈值。内核会尝试合并空闲内存页,以减少内存碎片和提高内存使用效率。

磁盘读写是一个费时操作,每次读取一个页面过于浪费。page_cluster为每次swap in或者swap out操作多少内存页,为2的指数,当为0的时候,为1页,为1的时候,2页,2的时候4页,通过此文件可以查看全局变量 page_cluster 的值,它在 swap_setup() 中赋值。


30. panic_on_oom

可读可写,cat出来值为 2。

此参数是一个开关,用于控制当系统内存不足时是否触发 kernel panic。当启用时,系统将在内存耗尽时触发panic,当禁用时,系统会尝试通过终止进程或其他手段来尝试恢复。


31. percpu_pagelist_fraction

可读可写,cat出来值为 0。

作用参考:https://zhuanlan.zhihu.com/p/583060023?utm_id=0


32. reap_mem_on_sigkill

可读可写,cat出来值为 1。


33. stat_interval

可读可写,cat出来值为 1。

用于设置内存统计信息输出到 /proc/zoneinfo 文件的时间间隔。更新 vm 统计信息的时间间隔。默认值为 1 秒。


34. stat_refresh

可读可写,cat出来没有值。

控制在刷新内存统计信息时是否清零统计数据。设置为 1 时表示清零,设置为 0 时表示不清零。


35. swappiness

可读可写,cat出来的值是 60。

此参数影响进行内存回收时,扫描匿名页lru链表和扫描文件页lru链表的比例,范围是0~100。接近0:进行内存回收时,更多地去扫描文件页lru链表,如果为0,那么就不会去扫描匿名页lru链表。接近100:进行内存回收时,更多地去扫描匿名页lru链表。


36. unprivileged_userfaultfd

可读可写,cat出来的值是 0。

决定是否允许非特权用户创建和使用 userfaultfd 文件描述符(用于处理用户态页缺失异常)。


37. user_reserve_kbytes

可读可写,cat出来的值是 131072。

为非特权进程保留的物理内存页大小,确保非特权用户总是能分配到一定数量的内存页。


38. vfs_cache_pressure

可读可写,cat出来的值是 100。

用于控制内核释放缓存页的速度。较高的值会导致更积极地释放缓存,以腾出更多的内存。


39. want_old_faultaround_pte

可读可写,cat出来的值是 1。


40. watermark_boost_factor

可读可写,cat出来的值是 15000。

是一个与内存分配和回收相关的参数。它代表了一个提升因子,用于调整内核在当系统内存紧张时触发内存回收的水位线。
水位线是内核用于判断是否需要触发内存回收的阈值。当空闲内存低于水位线时,内核会启动内存回收机制以释放内存并避免系统内存耗尽。水位线通常分为三个等级:min、low 和 high。
watermark_boost_factor 是一个浮点数,其默认值为1.0。它决定了在内存紧张时,内核将水位线向下调整的程度。较大的值将降低水位线,使内核更频繁地触发内存回收,从而提高内存的利用率和系统的响应性能。较小的值将增加水位线,使内核更少地触发内存回收,从而减少系统的开销。
调整 watermark_boost_factor 的值可以根据系统的需求来平衡内存利用率和响应性能。一般情况下,较大的值适用于高负载系统,而较小的值适用于资源充足的系统。


41. watermark_scale_factor

可读可写,cat出来的值是 10。

这是一个与内存管理相关的参数。它用于调整内核在计算内存水位线时考虑的“内存压力”因素的比例。
内存水位线是内核用于判断是否需要触发内存回收的阈值。当系统内存紧张时,内核将调整水位线,并启动内存回收机制以释放内存并避免系统内存资源耗尽。内核根据多个因素来计算水位线,其中之一就是“内存压力”。
watermark_scale_factor 是一个浮点数,默认值为1.0。它决定了内核在计算水位线时将“内存压力”因素乘以多少。较大的值将增加内存压力对水位线的影响,使内核更敏感地触发内存回收。较小的值则减少内存压力对水位线的影响,使内核更少地触发内存回收。
调整该值可以根据系统的需求来平衡内存利用率和系统的响应性能。较大的值适用于对内存利用率敏感的系统,例如服务器;而较小的值适用于对系统响应性能敏感的系统,例如桌面计算机或移动设备。
值得注意的是,调整该值需要慎重,因为过高或过低的值可能导致系统的性能问题或内存资源管理不足。建议在根据实际情况进行调整之前,先进行充分的测试和评估。

 

开启 CONFIG_NUMA 后才有的文件节点:

(1) zone_reclaim_mode

这个参数只会影响快速内存回收,其值有三种,
0x1:开启zone的内存回收。
0x2:开启zone的内存回收,并且允许回写。
0x4:开启zone的内存回收,允许进行unmap操作。

当此参数为0时,会导致快速内存回收只会对最优zone附近的几个需要进行内存回收的zone进行内存回收(说快速内存会解释),而只要不为0,就会对zonelist中所有应该进行内存回收的zone进行内存回收。

当此参数为0x1时,就如上面一行所说,允许快速内存回收对zonelist中所有应该进行内存回收的zone进行内存回收。
当此参数为0x2时,在0x1的基础上,允许快速内存回收进行匿名页lru链表中的页的回写操作。
当此参数0x4(100)时,在0x1的基础上,允许快速内存回收进行页的unmap操作。

 

三、/sys/kernel下的文件节点


1. ion/total_heaps_kb


2. ion/total_pools_kb


3. iommu_groups

/sys/kernel # ls iommu_groups
0 1 2 3

4. mm/swap/vma_ra_enabled

/sys/kernel # cat mm/swap/vma_ra_enabled
true

5. slab

ls可以看到有大量创建slab对应的节点:

/sys/kernel/slab # ls
PING                      bio-1                      erofs_inode               f2fs_xattr_entry-254:16  jbd2_inode            mm_struct            shmem_inode_cache
UDP-Lite                  biovec-64                  ext4_groupinfo_4k         fs_cache                 key_jar               nsproxy              task_struct
...

每一个子节点又有下面文件:

/sys/kernel/slab/task_struct # ls
aliases      cpu_partial  destroy_by_rcu  min_partial  objects_partial  partial          red_zone       slab_size          store_user     usersize
align        cpu_slabs    free_calls      object_size  objs_per_slab    poison           sanity_checks  slabs              total_objects  validate
alloc_calls  ctor         hwcache_align   objects      order            reclaim_account  shrink         slabs_cpu_partial  trace


6. software_nodes

是个空目录名


四、/sys/kernel/debug目录下的文件节点

1. memblock/memory

/sys/kernel/debug # cat memblock/memory
   0: 0x00000000aed01000..0x00000000bb500fff
   1: 0x00000000e3148000..0x00000000f4bfffff
   2: 0x00000000f7000000..0x00000000f7147fff
   ...
   7: 0x0000000800000000..0x00000008780fffff


2. memblock/reserved

/sys/kernel/debug # cat memblock/reserved
   0: 0x00000000aee46e70..0x00000000aee7fffc
   1: 0x00000000aee80000..0x00000000b2599fff
   2: 0x00000000ebc00000..0x00000000f4bfffff
   ...
  26: 0x00000008764d29e0..0x00000008780fffff


3. slab/alloc_trace

/sys/kernel/debug # cat slab/alloc_trace
alloc_list: call_site=spi_init+0x28/0xa4 count=1 object_size=128 slab_size=640 slab_name=kmalloc-128
spi_init+0x28/0xa4
do_one_initcall+0xe0/0x39c
do_initcall_level+0xc0/0x1cc
do_basic_setup+0x34/0x50
kernel_init_freeable+0x10c/0x1ac
kernel_init+0x1c/0x2d0
ret_from_fork+0x10/0x18
alloc_list: call_site=create_kmalloc_cache+0x40/0xd4 count=14 object_size=464 slab_size=1024 slab_name=kmem_cache
create_kmalloc_cache+0x40/0xd4
new_kmalloc_cache+0xec/0x11c
create_kmalloc_caches+0x6c/0xa4
kmem_cache_init+0xd4/0x148

记录每个slab分配的次数、大小、调用栈。


4. dma_buf/bufinfo

/sys/kernel/debug # cat dma_buf/bufinfo

Dma-buf Objects:
size            flags           mode            count           exp_name        ino
00262144        00000002        00080007        00000004        hgsl_memory     00833330
        Attached Devices:
        hab
Total 1 devices attached

00032768        00000002        00080007        00000002        ion_dma_buf     00833261
        Attached Devices:
Total 0 devices attached

18698240        00000002        00080007        00000001        ion_dma_buf     00833260
...


5. dma_buf/dmaprocs

/sys/kernel/debug # cat dma_buf/dmaprocs

surfaceflinger (PID 591) size: 285820
DMA Buffers:
Name            Size (KB)
(null)          18440
(null)          18440
...
composer@2.4-se (PID 506) size: 178352
DMA Buffers:
Name            Size (KB)
(null)          18440
(null)          5424
...


6. memcg_slabinfo

/sys/kernel/debug # cat memcg_slabinfo
# <name> <css_id[:dead|deact]> <active_objs> <num_objs> <active_slabs> <num_slabs> //什么内容也没有


7. regmap

它是一个目录:

/sys/kernel/debug # ls regmap/
dummy-syscon@0x1fd8000  dummy-syscon@0x1fdd000  dummy-syscon@0x1fdf000  spmi0-00  spmi0-04  spmi0-08  spmi0-0c
/sys/kernel/debug # ls regmap/dummy-syscon@0x1fd8000/
access  name  range  registers

/sys/kernel/debug/regmap/dummy-syscon@0x1fd8000 # cat access
000: y y y n
004: y y y n
...
/sys/kernel/debug/regmap/dummy-syscon@0x1fd8000 # cat name
nodev
/sys/kernel/debug/regmap/dummy-syscon@0x1fd8000 # cat range
0-ffc
/sys/kernel/debug/regmap/dummy-syscon@0x1fd8000 # cat registers
000: 00000000
004: 00000000
...


8. iommu

/sys/kernel/debug # ls iommu
io-pgtable  testbus  tests
/sys/kernel/debug # cat iommu/io-pgtable/pages
8


9. swiotlb

/sys/kernel/debug # cat swiotlb/io_tlb_nslabs
4096
/sys/kernel/debug # cat swiotlb/io_tlb_used
0


10. cma

/sys/kernel/debug # ls cma/
cma-cnss_wlan_r  cma-linux,cma  cma-mem_dump_re
/sys/kernel/debug # ls cma/cma-cnss_wlan_r/
alloc  base_pfn  bitmap  count  free  maxchunk  order_per_bit  used


11. ion

/sys/kernel/debug # ls ion/
ion_system_heap  qsecom  qsecom_ta  secure_heap  system
/sys/kernel/debug # ls ion/ion_system_heap/
alloc_bytes_wm  ion_system_heap_shrink  num_of_alloc_bytes  num_of_buffers
/sys/kernel/debug # ls ion/qsecom
alloc_bytes_wm  num_of_alloc_bytes  num_of_buffers
/sys/kernel/debug # ls ion/qsecom_ta/
alloc_bytes_wm  num_of_alloc_bytes  num_of_buffers
/sys/kernel/debug # ls ion/secure_heap/
alloc_bytes_wm  num_of_alloc_bytes  num_of_buffers  secure_heap_shrink
/sys/kernel/debug # ls ion/system/
alloc_bytes_wm  num_of_alloc_bytes  num_of_buffers  system_shrink  system_stats


12. page_owner

/sys/kernel/debug # cat page_owner
Page allocated via order 0, mask 0x112cca(GFP_HIGHUSER_MOVABLE|__GFP_NOWARN|__GFP_NORETRY), pid 4570, ts 47271373745714 ns
PFN 2863025 type Movable Block 2795 type Movable Flags 0x16(referenced|uptodate|lru)
 prep_new_page+0x10c/0x188
 get_page_from_freelist+0x22c/0x244
 __alloc_pages_nodemask+0x100/0x37c
 __do_page_cache_readahead+0x118/0x1f4
 ondemand_readahead+0x1e8/0x278
 page_cache_async_readahead+0xc4/0x108
 generic_file_buffered_read+0x13c/0xc90
 generic_file_read_iter+0x60/0x1e8
 __vfs_read+0x1a8/0x218
 vfs_read+0xc0/0x160
 ksys_read+0x84/0xf0
 __arm64_sys_read+0x24/0x34
 el0_svc_common+0xcc/0x1c4
 el0_svc_handler+0x34/0xa0
 el0_svc+0x8/0x300
...

cat打印无数这样的栈回溯信息。


13. show_mem_notifier

可读可写,cat为0.

 

五、/proc/pid目录下的文件

1. map_files

大多数是映射的动态库的软连接

/proc/3382 # ls -l map_files/79fec68000-79fec6a000
lr-------- 1 system system 64 2024-07-12 15:11 map_files/79fec68000-79fec6a000 -> /apex/com.android.runtime/bin/linker64
/proc/3382 # ls -l map_files/79e5b60000-79e5b6a000
lr-------- 1 system system 64 2024-07-12 15:11 map_files/79e5b60000-79e5b6a000 -> /system/lib64/android.hardware.cas.native@1.0.so


2. maps

cat可以打印出映射的文件、地址范围、权限

/proc/3382 # cat maps
79fd0ae000-79fd0af000 r--s 00000000 fc:03 143141504                      /system/framework/framework-graphics.jar
79fd0d9000-79fd0db000 rw-p 00000000 00:00 0                              [anon:bionic_alloc_small_objects]
79fd154000-79fd157000 r-xp 00003000 fc:03 1146697                        /apex/com.android.art/lib64/libnativehelper.so


3. mem

cat内核线程的是空的,cat用户线程报IO error

/proc/3382 # cat mem
cat: mem: I/O error


4. oom_adj

oom_adj、oom_score、oom_score_adj 是三个内存查杀相关的文件

/proc/3382 # cat oom_score
152
/proc/3382 # cat oom_adj
-13
/proc/3382 # cat oom_score_adj
-800


5. pagemap

只有可读属性,cat出来是乱码


6. reclaim

只有可写属性,可触发回收进程的匿名页和文件页

/proc/3382 # echo file > reclaim //文件页
/proc/3382 # echo anon > reclaim //匿名页
/proc/3382 # echo all > reclaim  //匿名页和文件页


7. smaps

应该是显示包含的各个段的详细信息

/proc/3382 # cat smaps
79fd756000-79fd776000 r--s 00000000 00:14 14283    /dev/__properties__/u:object_r:build_prop:s0
Size:                128 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                  16 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:         16 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:           16 kB
Anonymous:             0 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
FilePmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
THPeligible:            0
VmFlags: rd mr me ms
...
7ffc78b000-7ffcf8a000 rw-p 00000000 00:00 0    [stack]
Size:               8188 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                  52 kB
Pss:                  52 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         8 kB
Private_Dirty:        44 kB
Referenced:           52 kB
Anonymous:            52 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
FilePmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                 36 kB
SwapPss:              32 kB
Locked:                0 kB
THPeligible:            0
VmFlags: rd wr mr mw me gd ac


8. smaps_rollup

cat只有下面这一段

/proc/3382 # cat smaps_rollup
12c00000-7ffcf8a000 ---p 00000000 00:00 0           [rollup]
Rss:              569016 kB
Pss:              407311 kB
Pss_Anon:         232828 kB
Pss_File:         173746 kB
Pss_Shmem:           736 kB
Shared_Clean:     126308 kB
Shared_Dirty:      50720 kB
Private_Clean:    124152 kB
Private_Dirty:    267836 kB
Referenced:       508200 kB
Anonymous:        280212 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
FilePmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB

 

posted on 2024-04-12 16:19  Hello-World3  阅读(264)  评论(0编辑  收藏  举报

导航