Linux 系统内核参数 vm.overcommit_memory 怎么设?

文章导读
设置 Linux 系统内核参数 vm.overcommit_memory 主要通过 sysctl 命令或编辑配置文件实现。临时生效可使用命令 sudo sysctl -w vm.overcommit_memory=1,永久生效需编辑/etc/sysctl.conf 文件添加 vm.overcommit_memory=1 并执行 sysctl -p 加载。该参数有 0、1、2 三种模式,0 为默认启
📋 目录
  1. A Linux 服务内存分配失败解决方案:vm.overcommit_memory 参数配置指南
  2. B Linux vm.overcommit_memory 参数的三种模式
  3. C 【内存】Linux 内核优化实战 - vm.overcommit_memory
  4. D FAQ
A A

设置 Linux 系统内核参数 vm.overcommit_memory 主要通过 sysctl 命令或编辑配置文件实现。临时生效可使用命令 sudo sysctl -w vm.overcommit_memory=1,永久生效需编辑/etc/sysctl.conf 文件添加 vm.overcommit_memory=1 并执行 sysctl -p 加载。该参数有 0、1、2 三种模式,0 为默认启发式分配,1 为允许无条件过度承诺,2 为严格禁止过度承诺。根据业务场景选择合适的值,例如数据库服务常设为 1 以避免分配失败,但需配合内存限制防止 OOM。

Linux 服务内存分配失败解决方案:vm.overcommit_memory 参数配置指南

要解决 Linux 系统中各类服务因内存不足导致的启动 / 运行失败问题,可通过统一调整 vm.overcommit_memory 参数并结合配套措施来处理,以下是通用解决方案:一、核心逻辑:vm.overcommit_memory 的通用适配性 无论服务类型 (Java 中间件、数据库、Web 服务、脚本程序等),只要因内核拒绝内存分配导致故障,均可通过调整该参数打破分配限制。其本质是改变内核对"内存过度分配"的判断策略,让进程获得更灵活的内存申请权限。二、通用解决步骤 1. 检查当前内存分配策略 执行命令查看当前配置:sysctl vm.overcommit_memory 2. 根据场景选择参数值 3. 配置参数并生效 临时生效 (用于快速测试): sudo sysctl -w vm.overcommit_memory=1# 以设置为 1 为例,可根据场景替换为 0 或 2 永久生效 (重启后保持配置):编辑/etc/sysctl.conf,添加或修改配置:vm.overcommit_memory=1 加载配置使其立即生效:sudo sysctl -p/etc/sysctl.conf 4. 验证与后续优化 重启故障服务,观察是否能正常启动 (如 systemctl restart your-service)。结合 free -h、top 等命令监控内存使用,确保服务稳定运行。

Linux vm.overcommit_memory 参数的三种模式

Linux vm.overcommit_memory 参数的三种模式 cat/etc/sysctl.conf|grepvm.overcommit_memory 1 作用:查看系统内存超量分配 (overcommit) 的配置策略 输出示例:vm.overcommit_memory=0# 或者 vm.overcommit_memory=1# 或者 vm.overcommit_memory=2 1 2 3 4 5 如果没输出:表示使用内核默认值 (通常是 0) vm.overcommit_memory 的三种模式 模式 0(默认):试探性超量分配 vm.overcommit_memory=0 1 工作机制:内核试探性允许超量分配 使用启发式算法检查:允许分配=(空闲内存 + 可回收缓存+Swap)× overcommit_ratio+ 特殊保留 1 可能拒绝大内存申请 (特别是 >50% 总内存) 适合场景:大多数通用服务器和工作站 模式 1:总是允许超量分配 vm.overcommit_memory=1 1 极端策略:从不拒绝任何 malloc() 请求 假设应用程序不会使用所有申请的内存 可能触发 OOM Killer 随机杀进程 风险:# 场景:8GB 内存的系统应用程序 A 申请:6GB(实际使用 1GB) 应用程序 B 申请:6GB(实际使用 1GB)# 也被允许!应用程序 C 申请:6GB(实际使用 1GB)# 也被允许!# 结果:申请了 18GB,远超出物理内存,最终 OOM 1 2 3 4 5 使用场景:科学计算 (知道内存使用模式) 特定优化场景 不推荐生产环境使用 模式 2:禁止超量分配 vm.overcommit_memory=2 1 严格策略:内存分配不能超过:允许总量 = Swap 空间 + 物理内存 × overcommit_ratio 1 默认 overcommit_ratio = 50% 计算示例 (8GB 内存 + 8GB Swap): 允许总量 = 8GB + 8GB × 50% = 8GB + 4GB = 12GB 1

Linux 系统内核参数 vm.overcommit_memory 怎么设?

【内存】Linux 内核优化实战 - vm.overcommit_memory

vm.overcommit_memory 是 Linux 内核中的一个参数,用于控制内存分配的"过度承诺"(Overcommit) 策略。它决定了内核在分配内存时的保守程度,直接影响系统内存管理的行为和稳定性。二、参数取值与含义 该参数可设置为 0、1、2 三种值,每种取值对应不同的内存管理策略:0 启发式过度承诺 (默认值) 内核根据当前内存使用情况动态判断是否允许分配内存。当系统内存充足时允许适度过度承诺,内存紧张时则更保守。适用于大多数常规场景,平衡性能与稳定性。1 允许无条件过度承诺 内核会无条件允许内存分配请求,不严格检查物理内存是否足够。可能导致内存耗尽 (OOM, Out of Memory),但能最大化应用程序的内存申请成功率。适用于需要运行大量进程或内存使用波动大的场景 (如数据库、缓存服务),但需谨慎使用,避免 OOM。2 严格禁止过度承诺 内核会根据物理内存和 swap 空间的总量限制内存分配,确保分配的内存不超过 swap + 物理内存 * overcommit_ratio ( overcommit_ratio 默认为 50%)。适用于对稳定性要求极高的场景 (如服务器关键服务),避免因内存过度分配导致系统崩溃。三、相关参数与配置方式 vm.overcommit_ratio 当 vm.overcommit_memory=2 时生效,用于设置物理内存的过度承诺比例 (默认 50%)。例如:vm.overcommit_ratio=30 表示允许分配的内存总量不超过 swap + 物理内存 * 30%。配置方式 临时修改 (无需重启系统): # 查看当前值 sysctlvm.overcommit_memory# 设置为 1(允许无条件过度承诺)sysctl-wvm.overcommit_memory=1# 设置 overcommit_ratio 为 30sysctl-wvm.overcommit_ratio=30 1

FAQ

vm.overcommit_memory 的默认值是多少?

默认值通常是 0,表示启发式过度承诺处理。

Linux 系统内核参数 vm.overcommit_memory 怎么设?

设置为 1 会有什么风险?

设置为 1 表示总是允许超量分配,可能导致内存耗尽触发 OOM Killer 随机杀死进程。

Linux 系统内核参数 vm.overcommit_memory 怎么设?

如何永久修改该参数?

编辑/etc/sysctl.conf 文件添加配置,并执行 sysctl -p 命令加载生效。