内存管理-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) 编辑 收藏 举报