35.3. 虚拟内存参数
虚拟内存参数列在 /proc/sys/vm
目录中。
以下是可用的虚拟内存参数:
vm.dirty_ratio
-
是一个百分比值。当总系统内存的此百分比被修改时,系统开始向磁盘写入修改。默认值为
20
百分比。 vm.dirty_background_ratio
-
一个百分比值。修改系统内存占总内存的百分比时,系统会在后台开始向磁盘写入修改。默认值为
10
(百分比)。 vm.overcommit_memory
定义决定接受或拒绝大型内存请求的条件。默认值为
0
。默认情况下,内核会执行检查虚拟内存分配请求是否适合于存在的内存量 (total + swap),并只拒绝大型请求。否则会授予虚拟内存分配,这就意味着它们允许内存过量使用。
设置
overcommit_memory
参数的值:-
当这个参数设置为
1
时,内核不会执行内存过量使用处理。这会增加内存过载的可能性,但提高了内存密集型任务的性能。 -
当这个参数设定为
2
时,内核拒绝对内存的请求(等于或大于可用交换空间总量)以及overcommit_ratio
中指定的物理 RAM 百分比。这可降低过量使用内存的风险,但建议只针对交换区大于其物理内存的系统。
-
当这个参数设置为
vm.overcommit_ratio
-
当
overcommit_memory
设为2
时,指定物理 RAM 的百分比。默认值为50
。 vm.max_map_count
-
定义进程可以使用的最大内存映射区域数。默认值为
65530
。如果您的应用程序需要更多内存映射区域,则提高这个值。 vm.min_free_kbytes
设置保留可用页面池的大小。它还负责设置管理 Linux 内核页面回收算法行为的
min_page
、low_page
和high_page
阈值。它还指定在系统间保留的最小 KB 数。这会为每个低内存区计算一个特定值,每个值都会被分配一个保留的空闲页面的大小。设置
vm.min_free_kbytes
参数的值:- 增加参数值可有效减少应用程序工作集可用内存。因此,您可能希望将其仅用于内核驱动的工作负载,其中驱动程序缓冲区需要在原子上下文中分配。
减少参数值可能会导致内核无法服务系统请求,如果内存在系统中发生大量处理。
警告极端的值可能会降低系统性能。将
vm.min_free_kbytes
设置为非常低的值可防止系统有效地回收内存,这可能会导致系统崩溃并失败服务中断或其他内核服务。但是,设置vm.min_free_kbytes
太大地增加系统回收活动,从而导致分配延迟因为假的直接重新声明状态而造成分配延迟。这可能导致系统立即进入内存不足状态。vm.min_free_kbytes
参数还设置页面重新声明水位线,名为min_pages
。在确定两个其他内存水位线、low_pages
和high_pages
时,这个水位线被用作一个因素,它管理页面重新声明算法。
/proc/PID/oom_adj
如果系统内存不足,并且
panic_on_oom
参数设置为0
,oom_killer
功能会终止进程,从具有最高oom_score
的进程开始,直到系统恢复为止。oom_adj
参数决定了进程的oom_score
。这个参数会根据进程标识符设置。值-17
可禁用该进程的oom_killer
。其他有效的值范围从-16
到15
。
由调整的进程创建的进程将继承该进程的 oom_score
。
vm.swappiness
swappiness 值范围从
0
到200
,控制系统从匿名内存池回收内存或页面缓存内存池的程度。设置
swappiness
参数值:- 高的数值代表,优先选择文件映射驱动的工作负载,同时交换出不活跃访问的进程的 RAM 匿名映射内存。这对文件服务器或流式应用(来自存储中的文件)很有用,从而驻留在内存上,以减少服务请求的 I/O 延迟。
低值优先选择匿名映射驱动的工作负载,同时回收页面缓存(文件映射内存)。这个设置对于不依赖于文件系统信息的应用程序很有用,并且主要利用动态分配和私有内存,如数学和数字缩小应用程序,以及某些硬件虚拟化超级visors (如 QEMU)。
vm.swappiness
参数的默认值为60
。警告-
将
vm.swappiness
设置为0
会积极避免将匿名内存交换出磁盘,这会在内存不足或 I/O 密集型工作负载时,增加了进程被oom_killer
函数终止的风险。 如果您使用
cgroupsV1
,则cgroupsV1
独有的每个 cgroup swappiness 值将导致vm.swappiness
参数配置的系统范围的 swappiness 对系统的交换行为几乎没有影响。此问题可能导致意外的和不一致的交换行为。在这种情况下,请考虑使用
vm.force_cgroup_v2_swappiness
参数。如需更多信息,请参阅红帽知识库解决方案 使用 swappiness=0 交换,同时仍可回收页缓存。
-
将
force_cgroup_v2_swappiness
-
此控件用于弃用仅
cgroupV1
中可用的每个组 swappiness 值。所有系统和用户进程在 cgroup 中运行。cgroup 交换值默认为 60。这可能会导致系统交换值对系统的交换行为的影响很小。如果用户不关心每个组交换传送功能,他们可以使用force_cgroup_v2_swappiness=1
配置其系统,以在整个系统中具有更加一致的交换支配行为。
其他资源
-
系统中
sysctl (8)
手册页 - 设置与内存相关的内核参数