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_pagelow_pagehigh_page 阈值。它还指定在系统间保留的最小 KB 数。这会为每个低内存区计算一个特定值,每个值都会被分配一个保留的空闲页面的大小。

设置 vm.min_free_kbytes 参数的值:

  • 增加参数值可有效减少应用程序工作集可用内存。因此,您可能希望将其仅用于内核驱动的工作负载,其中驱动程序缓冲区需要在原子上下文中分配。
  • 减少参数值可能会导致内核无法服务系统请求,如果内存在系统中发生大量处理。

    警告

    极端的值可能会降低系统性能。将 vm.min_free_kbytes 设置为非常低的值可防止系统有效地回收内存,这可能会导致系统崩溃并失败服务中断或其他内核服务。但是,设置 vm.min_free_kbytes 太大地增加系统回收活动,从而导致分配延迟因为假的直接重新声明状态而造成分配延迟。这可能导致系统立即进入内存不足状态。

    vm.min_free_kbytes 参数还设置页面重新声明水位线,名为 min_pages。在确定两个其他内存水位线、low_pageshigh_pages 时,这个水位线被用作一个因素,它管理页面重新声明算法。

/proc/PID/oom_adj

如果系统内存不足,并且 panic_on_oom 参数设置为 0oom_killer 功能会终止进程,从具有最高 oom_score 的进程开始,直到系统恢复为止。

oom_adj 参数决定了进程的 oom_score。这个参数会根据进程标识符设置。值 -17 可禁用该进程的 oom_killer。其他有效的值范围从 -1615

注意

由调整的进程创建的进程将继承该进程的 oom_score

vm.swappiness

swappiness 值范围从 0200,控制系统从匿名内存池回收内存或页面缓存内存池的程度。

设置 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 配置其系统,以在整个系统中具有更加一致的交换支配行为。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.