一般不建议大家去动这个地方,但有时候因任务需要可能需要稍微改动一下配置,
watermark_scale_factor
:这是一个动态调节水印阈值的因子,影响内核如何响应内存压力。
dirty_bytes
和 dirty_background_bytes
: 这两个参数用于控制内核在多长时间内必须写回多少脏页(即已修改但未写入磁盘的数据页)到磁盘。dirty_bytes
是总的限制,而dirty_background_bytes
是在后台flush之前允许积累的脏页数量。
dirty_expire_centisecs
和 dirty_writeback_centisecs
: 分别定义了脏页在被写回前可以等待多久以及后台写回任务执行的频率。
dirty_ratio
和 dirty_background_ratio
: 类似于按百分比设置脏页限制,当可用内存达到这个比例时触发数据同步至磁盘。
drop_caches
: 一个可写的文件,写入特定值后可以清空缓存、目录项缓存和inode缓存,以释放内存。
overcommit_memory
、overcommit_ratio
和 oom_kill_allocating_task
: 这些参数与内存过载策略有关。overcommit_memory
控制是否允许内存过度分配;overcommit_ratio
定义了物理内存与Swap空间之间的过度使用比率;oom_kill_allocating_task
决定当系统内存不足时是否立即终止当前正在申请大量内存的任务。
mmap_min_addr
: 确定进程可以通过mmap()映射的最小地址,用于防止低地址空间的误用。
nr_hugepages
和 nr_overcommit_hugepages
: 设置大页面的数量,大页面是比普通页面更大的内存区域,常用于减少TLB miss,提高性能。
swappiness
: 定义系统在交换内存与物理内存之间平衡的倾向程度,范围0-100。
vfs_cache_pressure
: 控制内核回收用于目录和inode缓存的内存的压力度。
compaction_proactiveness
和 compact_memory
: 这些参数与内存压缩功能有关,旨在改善内存碎片问题。
admin_reserve_kbytes
:这是为系统管理员保留的内存量(以KB为单位),即使在内存压力很大的情况下也不会被分配给用户进程。默认值通常较小,一般无需改动。
dirty_ratio
:当文件系统缓存的数据量达到系统总内存的百分比时,内核会开始将脏数据回写到磁盘。过高可能导致I/O压力增大,过低可能浪费系统内存作为缓存的能力。
legacy_va_layout
:决定是否启用传统的虚拟地址布局。对于新硬件,通常应保持关闭状态。
mmap_min_addr
:限制可映射到用户空间的最小地址,用于防止栈溢出攻击等安全问题。
oom_dump_tasks
:如果设置为1,在发生OOM(Out Of Memory)错误时,内核会生成一个包含所有运行任务信息的转储文件,便于分析原因。
percpu_pagelist_high_fraction
:用于控制每个CPU上页高速缓存列表的大小阈值。
compaction_proactiveness
:定义内存压缩的积极程度,以减少内存碎片。
dirtytime_expire_seconds
:脏页可以等待刷新的最大时间(以秒为单位)。
lowmem_reserve_ratio
:低内存时预留内存比例,避免低内存条件下系统不稳定。
max_map_count
:单个进程可以创建的最大内存映射区域数量。
mmap_rnd_bits
和 mmap_rnd_compat_bits
:控制 mmap 地址随机化位数,有助于提高安全性。
oom_kill_allocating_task
:若设置为1,在内存不足时优先杀死当前申请内存导致OOM的进程。
overcommit_kbytes
:控制内核允许的内存过载额度。
stat_interval
和 stat_refresh
:与内存统计信息更新频率相关。
compact_memory
和 compact_unevictable_allowed
:控制内核何时尝试进行内存压缩操作。
drop_caches
:通过写入特定数值到该文件,可以清除页面缓存、目录缓存以及其他缓存,释放内存。
dirty_background_bytes
和 dirty_background_ratio
:这两个参数分别定义了后台写回磁盘的脏数据量(以字节为单位)和百分比。当达到这些阈值时,内核会在后台启动脏页写回操作,以防止在系统负载增加时发生大量同步写入导致的I/O阻塞。
extfrag_threshold
:用于大页面分配时的外部碎片处理阈值,控制何时触发试图减少物理内存外部碎片的操作。
memory_failure_recovery
:如果支持硬件错误报告机制,此设置可以控制内存故障后的恢复策略。
nr_hugepages_mempolicy
和 nr_overcommit_hugepages
:与大页相关的参数,前者用于限制进程mempolicy所能使用的预留大页数量,后者是针对过载情况下可超额分配的大页数量。
overcommit_ratio
:决定内核是否允许过度提交内存,其值是一个百分比,表示系统在何种程度上可以超过实际物理内存来分配虚拟内存。
unprivileged_userfaultfd
:控制非特权用户是否可以使用userfaultfd系统调用,该调用可用于实现延迟加载等内存优化技术。
dirty_bytes
和 dirty_expire_centisecs
:进一步细化对脏页回写的控制,一个基于时间(centisecs),另一个基于大小(bytes)。
hugetlb_optimize_vmemmap
和 hugetlb_shm_group
:前者用于优化hugeTLB映射,后者则指定了能够创建巨大页共享内存的组ID。
min_free_kbytes
:系统为了应对突发的内存需求而保留的最小空闲内存数量。
min_slab_ratio
和 min_unmapped_ratio
:控制slab缓存和未映射内存的最小比例,避免它们被压缩得太低影响系统的响应能力。
numa_stat
、numa_zonelist_order
:与NUMA(Non-Uniform Memory Access)架构相关的参数,前者用于统计NUMA节点信息,后者控制内存区域在不同NUMA节点上的分配顺序。
page-cluster
:控制相邻页合并写回的数量,以提高磁盘I/O效率。
page_lock_unfairness
:控制在争抢页锁定资源时,内核对于“不公平”情况的容忍度。
panic_on_oom
:若设置为1,在系统内存耗尽发生OOM(Out Of Memory)时,内核会立即 panic,这对于调试或安全性要求高的场景有用。
vfs_cache_pressure
:用于调整文件系统缓存回收的压力,较高值意味着更积极地释放缓存空间给其他用途。
user_reserve_kbytes
:类似于admin_reserve_kbytes,但这是为普通用户空间进程保留的内存额度。
这些参数修改可直接使用echo命令
echo 1 >/proc/sys/vm/overcommit_memory
# 表示允许程序超物理内存量申请内存
?
要修改这些参数,通常可以通过编辑 /etc/sysctl.conf
文件并在其中添加相应的行,如:
要修改这些参数,通常可以通过编辑 /etc/sysctl.conf 文件并在其中添加相应的行,如:
vm.dirty_ratio = 20
vm.admin_reserve_kbytes = 1024
然后执行 sysctl -p
命令使其生效。不过请注意,具体配置需根据您的系统负载、内存大小以及应用需求来调整。