前言
/proc/sys/vm/ 目录是 Linux 系统中的一个特殊目录,它包含了与虚拟内存子系统相关的系统内核参数。这些参数可以用来配置系统的虚拟内存管理策略,包括内存分配、页面置换、内存压缩、NUMA 等方面的设置。用户和系统管理员可以通过修改这些内核参数来调整系统的内存管理行为,以优化系统性能或满足特定的应用需求。
一、/proc/sys/vm/目录各文件
根据列出的文件名,这些文件涉及到 Linux 操作系统的调优和内核参数的配置。下面逐个分析各个文件的作用和含义:
-
admin_reserve_kbytes
:该文件用于配置管理员保留的内存大小,以字节为单位。这些内存页不会被分配给普通用户。 -
compaction_proactiveness
:- 该参数用于配置内存紧缩(memory compaction)的主动性。内存紧缩是一种机制,用于解决内存碎片化问题。在内存压缩过程中,内核会尝试重新组织内存页,以便更容易找到连续的内存块来满足分配请求。
- 可能的取值范围为 0 到 100。较高的值表示更积极主动地进行内存紧缩,但也可能增加系统负载。较低的值则表示更保守的紧缩策略,可能导致内存碎片的累积。
- 用户可以通过修改这个参数来调整内存紧缩的主动性,从而平衡系统的内存利用率和性能开销。
-
compact_memory
:- 该参数用于启用或禁用内存的同区压缩(memory compaction)。同区压缩是一种特定的内存管理策略,通过重新组织内存页来减少内存碎片化,提高内存利用率。
- 可能的取值为 0(表示禁用)或 1(表示启用)。
- 用户可以通过修改这个参数来控制系统是否使用同区压缩来优化内存布局。
-
compact_unevictable_allowed
:- 这个参数用于配置是否允许压缩不可被驱逐的内存(unevictable memory)。
- 不可被驱逐的内存是一种无法从内存中移除的内存,例如被锁定的内存或内核数据结构等。
- 设置为 1 表示允许压缩不可被驱逐的内存,设置为 0 则表示禁止压缩这部分内存。
- 用户可以通过修改这个参数来调整系统对不可被驱逐内存的处理策略。
-
dirty_background_bytes
:- 该参数定义了当系统中脏页达到此阈值时,后台写回进程(内核线程)将开始写回脏页到磁盘。
- 单位为字节,这个参数用于控制在后台写回脏页时可用内存的阈值。
-
dirty_background_ratio
:- 与
dirty_background_bytes
类似,这个参数定义了后台写回进程开始写回脏页的内存使用比率阈值。 - 以系统可用内存的百分比来表示。
- 与
-
dirty_bytes
:- 这个参数定义了在脏页被强制回写之前脏页的数量上限。
- 当脏页的数量超过此阈值时,内核将启动写回脏页的操作。
-
dirty_expire_centisecs
:- 该参数设置了脏页被认为“过期”的时间,单位为100毫秒。
。过期的脏页将被写回到磁盘。 - 当脏页在内存中存在时间超过这个阈值时,它将被认为是过期的。
- 该参数设置了脏页被认为“过期”的时间,单位为100毫秒。
-
dirty_ratio
:- 定义了内存中可以被脏页占用的最大比例。当这个比例被超过时,进程将被阻塞,以等待脏页写回磁盘。
-
dirtytime_expire_seconds
:这个参数定义了脏页存在时间的上限,在这个时间之后,脏页将被写回到磁盘。 -
dirty_writeback_centisecs
: 用于配置脏页刷新到磁盘的时间间隔,单位为百分之一秒。 -
drop_caches
:该参数并非用于配置脏页,而是用于清空文件系统缓存和页缓存,以释放内存。可以通过在这个文件中写入不同的数值来执行不同的清理操作。echo 3 > /proc/sys/vm/drop_caches
, 执行缓存清空操作。数字 3 代表清空页缓存、目录项缓存和 inode 缓存。
13.extfrag_threshold
:这个参数用于控制系统分配连续内存页面的策略。当内存分配请求被满足时,内核会尽量提供连续的物理内存页。“extfrag_threshold” 就是设置内核认为内存碎片过大的阈值。
-
hugetlb_shm_group
:这个参数是为了支持 HugeTLB(大页面)而设置的。它指定了希望使用大页面的用户空间进程的共享内存分配所需的权限。 -
laptop_mode
:这个参数是针对笔记本电脑而设计的,用于控制系统在省电模式下的行为。当启用 “laptop_mode” 时,系统会尽量降低功耗,延长电池续航时间。 -
legacy_va_layout
:这个参数用于启用或禁用内核在用户态地址空间中使用传统的 “VA = PA + PAGE_OFFSET” 布局。通常情况下,不需要手动修改此参数。 -
lowmem_reserve_ratio
:这个参数决定了系统在低内存条件下要保留多少内存以供内核使用。默认情况下,内核会保留一部分内存,以便能够应对低内存压力和系统任务的需要。 -
max_map_count
:这个参数限制了每个进程能够创建的内存映射区(vma)的数量。通过限制这个数量,可以提高系统的安全性和稳定性。 -
memory_failure_early_kill
:这个参数决定了内核对检测到的内存故障的处理方式。当启用 “memory_failure_early_kill” 时,内核会快速杀死出现内存故障的进程以防止进一步的损害。 -
memory_failure_recovery
:这个参数用于设置内核对内存错误的恢复行为。它决定了内核在检测到内存故障后的下一步操作,如是否尝试修复或替换故障的内存区域。 -
min_free_kbytes
:是 Linux 内核中的一个调整参数,用于设置最小空闲内存的阈值。它表示内核将尽量保留的空闲内存量,以确保系统具有足够的可用内存来应对突发的内存需求。以页的数量为单位。当内存使用量接近min_free_kbytes
时,内核会避免分配更多的内存页面,以保留一定的空闲内存。这样做的目的是避免系统因为内存不足而陷入频繁的页面置换操作,以及在处理突发内存需求时能够有一些缓冲空间。 -
min_slab_ratio
:这个参数用于控制内核中 slab 分配器的空间使用比例。它表示 slab 缓存的最小使用比例,当 slab 缓存的使用比例低于该值时,内核会释放一些 slab 缓存以回收内存空间。 -
min_unmapped_ratio
:这个参数用于控制内核中未映射内存的使用比例。当未映射内存的使用比例低于该值时,内核会回收未映射的内存页面以释放内存空间。 -
mmap_min_addr
:这个参数用于限制被非特权进程用于 mmap() 系统调用的地址范围。它指定了 mmap() 返回的映射地址的最小值,防止用户空间进程随意映射低地址空间。 -
mmap_rnd_bits
和mmap_rnd_compat_bits
:这两个参数控制 mmap 映射地址的随机化。mmap_rnd_bits 指定了 mmap 映射地址的位数,mmap_rnd_compat_bits 指定了与其他架构上的二进制兼容时的位数。` -
nr_hugepages
和nr_hugepages_mempolicy
:这两个参数用于设置系统中 HugeTLB(大页面)的数量。nr_hugepages 设置为大于 0 的值时,表示分配固定数量的大页面;nr_hugepages_mempolicy 在 NUMA 架构上指定了每个 NUMA 节点分配的大页面数量。 -
cnr_overcommit_hugepages
:这个参数用于设置系统中额外可动态分配的 HugeTLB(大页面)的数量。当系统的 HugeTLB 使用完时,内核会尝试动态分配额外的 HugeTLB 页面。 -
numa_stat
文件提供了 NUMA(非统一内存访问)系统的统计信息。。NUMA 是一种多处理器系统架构,其中每个处理器与特定的内存区域(称为 NUMA 节点)关联,而且每个处理器只能直接访问本地节点的内存,对其他节点的访问需要通过交互连