当前位置: 首页 > news >正文

Linux的overcommit配置

转载:http://www.firefoxbug.com/index.php/archives/2800/

 

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。

当内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

Overcommit和下面两个vm的配置有关系。

vm.overcommit_ratio 
vm.overcommit_memory

overcommit_memory

0 — 默认设置。个人理解:当应用进程尝试申请内存时,内核会做一个检测。内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。举个例子,比如1G的机器,A进程已经使用了500M,当有另外进程尝试malloc 500M的内存时,内核就会进行check,发现超出剩余可用内存,就会提示失败。
1 — 对于内存的申请请求,内核不会做任何check,直到物理内存用完,触发OOM杀用户态进程。同样是上面的例子,1G的机器,A进程500M,B进程尝试malloc 500M,会成功,但是一旦kernel发现内存使用率接近1个G(内核有策略),就触发OOM,杀掉一些用户态的进程(有策略的杀)。
2 — 当 请求申请的内存 >= SWAP内存大小 + 物理内存 * N,则拒绝此次内存申请。解释下这个N:N是一个百分比,根据overcommit_ratio/100来确定,比如overcommit_ratio=50,那么N就是50%。

vm.overcommit_ratio

只有当vm.overcommit_memory = 2的时候才会生效,内存可申请内存为

SWAP内存大小 + 物理内存 * overcommit_ratio/100

查看系统overcommit信息

$ grep -i commit /proc/meminfo
CommitLimit:    517584 kB
Committed_AS:  3306488 kB

CommitLimit:最大能分配的内存(个人理解仅仅在vm.overcommit_memory=2时候生效),具体的值是
SWAP内存大小 + 物理内存 * overcommit_ratio / 100

Committed_AS:当前已经分配的内存大小

转载于:https://www.cnblogs.com/llc-blog/p/8658390.html

相关文章:

  • 比特币现金改变了我们的生活
  • 将用户当前表空间中的表和索引迁移到另一个表空间
  • Apache OFBIZ高速上手(三)--文件夹amp;amp;配置文件介绍
  • 字符串输入
  • 06.C(指针)
  • JavaEE GenericServlet 解析
  • 算法系列15天速成——第十四天 图【上】
  • ionic3 关于屏幕方向问题
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • Confluence 6 更新目录
  • Quartz 表达式生成器
  • MongoDb进阶实践之五 MongoDB修改命令详述
  • [2]十道算法题【Java实现】
  • SSH密钥分发
  • Angular数据绑定机制
  • 网络传输文件的问题
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • bearychat的java client
  • CentOS6 编译安装 redis-3.2.3
  • co.js - 让异步代码同步化
  • github从入门到放弃(1)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • node-glob通配符
  • storm drpc实例
  • v-if和v-for连用出现的问题
  • 反思总结然后整装待发
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 我是如何设计 Upload 上传组件的
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 优秀架构师必须掌握的架构思维
  • const的用法,特别是用在函数前面与后面的区别
  • ​如何在iOS手机上查看应用日志
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (1)STL算法之遍历容器
  • (Git) gitignore基础使用
  • (Note)C++中的继承方式
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)计算机毕业设计高校学生选课系统
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • ../depcomp: line 571: exec: g++: not found
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net FrameWork总结
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .pop ----remove 删除
  • /run/containerd/containerd.sock connect: connection refused
  • [BZOJ 1040] 骑士
  • [C++]类和对象(中)
  • [CERC2017]Cumulative Code
  • [Codeforces1137D]Cooperative Game
  • [CSS] - 修正IE6不支持position:fixed的bug