首页/系统/Linux 内核与性能调优速查/vm.overcommit_kbytes 固定提交上限
内存与 OOM58 条

vm.overcommit_kbytes 固定提交上限

overcommit_memory=2 时可改用固定字节数作为提交上限(非 0 时优先于 overcommit_ratio),适合需要精确控制可提交内存的机器。

固定提交上限

当 vm.overcommit_memory 设为 2(严格模式)时,内核按一个固定的可提交内存上限来拒绝超额分配。这个上限默认由「swap + 物理内存 × overcommit_ratio%」计算,而 vm.overcommit_kbytes 允许改用固定字节数替代比例计算:只要它非 0,就优先于 overcommit_ratio。适合需要精确控制可提交内存总量的机器,例如把余量固定下来做多租户规划或按应用文档要求固化上限。

基本信息

参数名vm.overcommit_kbytes
生效前提vm.overcommit_memory = 2 时才参与计算
默认值0,表示改用 overcommit_ratio 计算
单位写入值以 KB 计
观察/proc/meminfo 的 CommitLimit 与 Committed_AS

典型使用场景

  • 多租户机器上精确规划可提交内存总量
  • 内存数据库按官方文档要求调整 overcommit 后固化上限
  • 排查大额分配失败(mmap 返回 ENOMEM)的原因
  • 核对 CommitLimit 是否覆盖业务峰值需求
  • 变更前评估余量与风险窗口

查看与设置

查看与设置
sysctl vm.overcommit_memory vm.overcommit_ratio vm.overcommit_kbytes
grep -E 'CommitLimit|Committed_AS|SwapTotal|MemTotal' /proc/meminfo
sysctl -w vm.overcommit_memory=2           # 先切到严格模式,kbytes 才会参与计算
sysctl -w vm.overcommit_ratio=50           # 比例模式下的上限
sysctl -w vm.overcommit_kbytes=8388608     # 改为固定 8GiB:非 0 时覆盖比例计算
grep -E 'CommitLimit' /proc/meminfo         # 确认生效后的上限
cat /proc/sys/vm/overcommit_kbytes

相关项读法

项含义注意
overcommit_memory0 启发式,1 总是允许,2 严格按上限只有 2 才使用上限计算
overcommit_ratio按物理内存百分比计算上限与 kbytes 同时配置时被忽略
overcommit_kbytes固定的可提交字节上限非 0 即优先,覆盖比例计算
CommitLimit当前实际生效的可提交上限用于核对配置结果是否如预期
比例模式下 CommitLimit 约等于 swap 加上物理内存乘以 overcommit_ratio%;设置为固定 kbytes 之后改用这个固定值。
上限调小后,大页、共享内存等大额分配可能直接失败;变更前应核对 CommitLimit 与 Committed_AS 的差值是否仍留有余量。

正确的核对顺序

  • 先确认 overcommit_memory 是否为 2,否则上限根本不参与判断
  • 再看 CommitLimit 与 Committed_AS 的差值,估算剩余可提交空间
  • 变更后滚动重启大内存应用,确认大额分配仍然成功
严格模式把风险前移到分配阶段:分配会直接失败而不是等到运行期被内核杀掉,前提是应用能正确处理分配失败并降级。

易错点

  • kbytes 与 ratio 同时配置还想两者叠加:kbytes 非 0 时 ratio 不参与计算,预期会落空
  • 上限调得过紧:大额分配直接失败,应用报 ENOMEM 而系统内存其实并不紧张
  • 忘记 overcommit_memory 不是 2:此时 kbytes 不参与计算,改了也看不到效果
  • 只看 MemFree 判断余量:严格模式下应比较 CommitLimit 与 Committed_AS
  • 单位理解错误:写入值以 KB 计,按字节理解会放大三个数量级

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/vm.rst
  • Linux 内核 Documentation/mm/overcommit-accounting.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌