news 2026/6/10 7:02:16

Linux vm.overcommit_memory 参数的三种模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux vm.overcommit_memory 参数的三种模式
cat/etc/sysctl.conf|grepvm.overcommit_memory
  • 作用:查看系统内存超量分配(overcommit)的配置策略
  • 输出示例
    vm.overcommit_memory=0# 或者vm.overcommit_memory=1# 或者vm.overcommit_memory=2
  • 如果没输出:表示使用内核默认值(通常是 0)

vm.overcommit_memory 的三种模式

模式 0(默认):试探性超量分配

vm.overcommit_memory=0

工作机制

  1. 内核试探性允许超量分配
  2. 使用启发式算法检查:
    允许分配=(空闲内存+可回收缓存+Swap)× overcommit_ratio+特殊保留
  3. 可能拒绝大内存申请(特别是 >50% 总内存)

适合场景:大多数通用服务器和工作站

模式 1:总是允许超量分配

vm.overcommit_memory=1

极端策略

  • 从不拒绝任何 malloc() 请求
  • 假设应用程序不会使用所有申请的内存
  • 可能触发OOM Killer随机杀进程

风险

# 场景:8GB内存的系统应用程序A申请:6GB(实际使用1GB)应用程序B申请:6GB(实际使用1GB)# 也被允许!应用程序C申请:6GB(实际使用1GB)# 也被允许!# 结果:申请了18GB,远超出物理内存,最终OOM

使用场景

  • 科学计算(知道内存使用模式)
  • 特定优化场景
  • 不推荐生产环境使用

模式 2:禁止超量分配

vm.overcommit_memory=2

严格策略

  • 内存分配不能超过
    允许总量 = Swap空间 + 物理内存 × overcommit_ratio
  • 默认 overcommit_ratio = 50%
  • 计算示例(8GB内存 + 8GB Swap):
    允许总量 = 8GB + 8GB × 50% = 8GB + 4GB = 12GB

优点

  • 防止内存过度申请
  • 更可预测的内存行为

缺点

  • 可能过早拒绝内存申请
  • 需要合理配置 Swap 和 ratio

相关配置参数

overcommit_ratio(默认 50%)

# 查看当前值cat/proc/sys/vm/overcommit_ratio# 输出: 50# 配置示例:允许使用60%物理内存用于超量分配vm.overcommit_ratio=60

overcommit_kbytes

# 以字节为单位的绝对限制(优先级高于ratio)vm.overcommit_kbytes=10485760# 10GB限制

查看当前状态

# 1. 查看当前overcommit设置cat/proc/sys/vm/overcommit_memory# 2. 查看内存超量分配统计cat/proc/meminfo|grep-i commit# 输出示例:CommitLimit:16257644kB# 系统允许分配的最大内存Committed_AS:10238456kB# 当前已申请的内存总量

实际配置示例

场景1:数据库服务器优化

# /etc/sysctl.conf# 禁止超量分配,确保内存可靠性vm.overcommit_memory=2# 允许使用70%物理内存 + 全部Swapvm.overcommit_ratio=70# 让配置生效sysctl -p

场景2:HPC/科学计算集群

# 知道应用会申请大量内存但使用不多vm.overcommit_memory=1# 配合cgroup限制,防止单个应用失控

场景3:内存紧张的虚拟机

# 严格限制,避免OOMvm.overcommit_memory=2vm.overcommit_ratio=40# 保守设置vm.swappiness=10# 减少Swap使用倾向

故障诊断命令

# 查看OOM相关日志dmesg|grep-i"out of memory\|oom"# 查看内存分配失败统计grep-r"alloc failed"/var/log/# 监控内存申请情况watch-n1'grep -E "CommitLimit|Committed_AS" /proc/meminfo'

最佳实践建议

  1. 生产服务器:建议使用模式 2,配合合理 Swap
  2. 默认值(模式 0)适合大多数场景
  3. 模式 1 要谨慎:确保有完善的监控和进程管理
  4. 重要提示:修改后需要执行sysctl -p生效

常见问题排查

# 问题:应用报"cannot allocate memory"但free显示有内存# 可能原因:overcommit_memory=2且CommitLimit已满# 解决:查看当前限制cat/proc/meminfo|grepCommit# 临时提高限制(重启失效)echo80>/proc/sys/vm/overcommit_ratio

核心理解vm.overcommit_memory控制的是内存申请的许可策略,而不是实际使用。Linux 允许程序申请比物理内存更多的空间,因为很多程序申请后并不立即使用全部。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 17:09:57

筑牢身份核验的“真实防线”

在远程身份核验场景中,如何区分真实人脸与照片、视频等虚假手段,是保障安全的关键。传统活体检测多依赖单一动作指令,易被高精度伪造手段突破,而炫彩活体检测技术的应用,为这一问题提供了更可靠的解决方案。 不同于常规…

作者头像 李华
网站建设 2026/5/19 14:46:32

文献重复率超过30%?五个快速有效的降重技巧

论文重复率超30%?5个降重技巧,一次降到合格线 嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一…

作者头像 李华
网站建设 2026/6/7 6:12:01

Qwen3-14B显存占用分析:不同模式下资源消耗对比

Qwen3-14B显存占用分析:不同模式下资源消耗对比 1. 技术背景与问题提出 随着大模型在推理能力、上下文长度和多语言支持等方面的持续演进,如何在有限的硬件资源下高效部署高性能模型成为工程落地的关键挑战。通义千问系列最新推出的 Qwen3-14B 模型&am…

作者头像 李华
网站建设 2026/6/3 15:14:56

【安全测试】Web应用最容易忽略的逻辑漏洞

01 短信炸弹 1、漏洞描述 短信轰炸攻击是常见的一种攻击,攻击者通过网站页面中所提供的发送短信验证码的功能处,通过对其发送数据包的获取后,进行重放,如果服务器短信平台未做校验的情况时,系统会一直去发送短信&…

作者头像 李华
网站建设 2026/5/29 22:56:57

Jmeter接口测试和性能测试

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 目前最新版本发展到5.0版本,需要Java7以上版本环境,下载解压目录后,进入\apache-jmeter-5.0\bin\,双击ApacheJMete…

作者头像 李华
网站建设 2026/6/10 0:51:12

从被动告警到主动狩猎:网络安全检测技术的深度解析与高级对抗实践

一,网络安全漏洞 安全威胁是指所有能够对计算机网络信息系统的网络服务和网络信息的机密性,可用性和完整性产生阻碍,破坏或中断的各种因素。安全威胁可分为人为安全威胁和非人为安全威胁两大类。 1,网络安全漏洞威胁 漏洞分析的…

作者头像 李华