linux 内存分配限制,overcommit_memory 2
诡异场景:
当你发现程序在申请大段内存的时候,发生申请失败。
这时候你通过查看free -g发现free下的内存还有大量可以使用的内存。
然后你再继续查看ulimit -a的时候,却发现max memroy size为不受限。
这时候你或许会很疑惑,为什么在足够内存的情况下,当申请内存达到一定量的时候,却还是失败呢。
这时候你查看sysctl -a | grep "vm.overcommit_memory",如果你发现值为2,那么问题便是发生在这里了
在我们进行内存申请的时候,如malloc 200m,这时候仅仅是进行内存申请,但实际使用的时候可能仅仅是100m, 意味着有100m并没有真是被分配。
这时候我们通过free 看到使用的也只有100m的内存。但是vm.overcommit_memory其关注的是申请的内存,即200m的内存,这点需要注意。
而vm.overcommit_memory的意思:
- 0 — 默认设置。内核执行启发式内存过量使用处理,方法是估算可用内存量,并拒绝明显无效的请求。遗憾的是因为内存是使用启发式而非准确算法计算进行部署,这个设置有时可能会造成系统中的可用内存超载。
- 1 — 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。
- 2 — 内存拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的
值为2下的场景:
公式:CommitLimit = (Physical RAM * vm.overcommit_ratio / 100) + Swap
Physical RAM为当前系统的总物理内存
vm.overcommit_ratio为物理内存的比例,默认为50
Swap为当前系统的总Swap
可以通过查看
grep -i commit /proc/meminfo
CommitLimit: 73955212 kB
Committed_AS: kB
这里的CommitLimit为当前系统可以申请的总内存,Committed_AS为当前已经申请的内存,记住是申请。
因此当你的free查看有很多大量可用的内存的时候,实际Committed_AS可能已经申请了大量的内存了,在vm.overcommit_memory 2模式下,后续的程序可以申请的剩余内存
为CommitLimit - Commited_AS了。
而vm.overcommit_memory设置为2一般是建议当Swap大于物理内存的时候才进行设置。
而vm.overcommit_memory一般是设置为0模式的。
因此现在你知道该如何查理这种场景了吧。
参考文章:
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-memory-captun.html
http://linuxperf.com/?p=102
http://engineering.pivotal.io/post/Virtual_memory_settings_in_Linux_-_The_problem_with_Overcommit/
linux 内存分配限制,overcommit_memory 2相关推荐
- mysql数据库内存分配_MySQL OOM 系列一 Linux内存分配
RDS(网易云关系数据库服务)上线已经有一段时间,陆续不断有产品迁入到了RDS中,在线上运维的过程中,也遇到了一些曾经没有考虑到,或者考虑的不全的东西.后续有时间可以分享给大家. 今天想提到的是线上一 ...
- linux为系统分配内存,Linux操作系统知识讲解:走进Linux 内存分配算法
Linux 内存分配算法 内存管理算法--对讨厌自己管理内存的人来说是天赐的礼物 1.内存碎片 1) 基本原理 产生原因:内存分配较小,并且分配的这些小的内存生存周期又较长,反复申请后将产生内存碎片的 ...
- 一文读懂 Linux 内存分配全过程
在<你真的理解内存分配>一文中,我们介绍了 malloc 申请内存的原理,但其在内核怎么实现的呢?所以,本文主要分析在 Linux 内核中对堆内存分配的实现过程. 本文使用 Linux 2 ...
- oracle linux内存推荐分配,[20191114]linux内存分配的讨论.txt
[20191114]linux内存分配的讨论.txt --//链接http://www.itpub.net/thread-2121531-1-1.html上的讨论. # sysctl -p net.i ...
- linux内存分配机制,Linux内存分配机制:SLAB / SLUB / SLOB
Linux内存分配机制:SLAB / SLUB / SLOB [日期:2011-07-15] 来源:Linux社区 作者:do2jiang [字体:大 中 小] slob: introduce the ...
- linux内存分配与回收
大神博客传送门:http://luodw.cc/2016/08/13/linux-cache/ 之前在实习时,听了OOM的分享之后,就对linux内核内存管理充满兴趣:但是这块知识非常庞大,没有一定积 ...
- linux内存分配 连续 足够,linux内存池能分配连续物理内存吗
中. size参数: 内核是基于页技术分配内存,以最佳的利用系统的RAM. linux处理内存分配的方法是:创建一系列的内存对象池,每个池的内存大小事固定的,处理分配请求时,就直接在包含足够大的内存块 ...
- linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap
Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...
- linux内存分配堆栈数据段代码段,linux – LD_PRELOAD堆栈和数据段内存分配
你好, 我正在编写一个Linux模块(基于名为"Ccontrol"的GitHub项目)来创建缓存分区(a.k.a页面着色),以减轻定时侧通道攻击(用于防止Prime Probe等攻 ...
最新文章
- 详解PyTorch编译并调用自定义CUDA算子的三种方式
- android 使用浏览器打开指定页面
- 转:HTTP协议简介与在python中的使用详解
- Linux 普通用户和超级用户的切换
- java学习笔记之数组
- STM32----摸石头过河系列(三)
- Vue3 插槽使用详解
- Mac 启动时屏幕上的特殊图像标识都是什么意思
- hdu1505 dp:01矩形中最大面积全0矩阵
- VISIO各种图标超全(IT行业专用网络及硬件)_工业控制网络的现状
- EMC抗扰度性能的EN和IEC标准有哪些?
- 简述redis集群的实现原理
- 零基础如何用平面设计排版软件PS进行布局构图
- gridview的sort_GridView中排序问题
- 【转】图像视觉开源代码
- 山东理工ACM 1152 C语言实验——求两个整数之和
- 卡塔尔世界杯除了没有中国队以外,都是中国元素!
- 剑走偏锋——老女人教你另类情人节攻略
- 用户体验为什么重要?如何提升产品的用户体验?(写给产品小白)
- OSChina 周二乱弹 —— 同在一室不相亲,早晚相见不相识
热门文章
- python读docx文件_Python读写docx文件的方法
- 我漂!“五险一金”跨省转移攻略!!!
- 资产定价Model——随机变量因子
- 线上直播丨国际人工智能会议AAAI 2021论文北京预讲会,33场报告+31个Poster等你来...
- 介绍一个优质的学习分类网站-学吧导航
- 记者讲述iPhone被盗46天后成功找回的经历
- 提升python运行效率_斗式提升机(TD、TH、NE型)
- C# 将所有的DLL文件 打包到 exe里面,就是说整个项目只有一个exe
- 【计算机组成与设计 硬件/软件接口-2】MIPS指令集架构
- 怎样将MathType中的公式加入到iBooks Author