linux内核killler,Linux内核参数overcommit_memory和OOM killer介绍
什么是Linux Overcommit和OOM
overcommit_memory是一个内核对内存分配的一种策略,它有三个可选值:0、1、2。
0. 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,
并把错误返回给应用进程。
1. 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2. 表示内核允许分配超过所有物理内存和交换空间总和的内存。
Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。
这种技术叫做 Overcommit。
当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程
(用户态进程,不是内核线程),以便释放内存。
例如Linux下发现有如下报错信息,则说明系统发生了OOM killer
# dmesg | grep redis | grep "oom-killer"
redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_score_adj=0
redis-server invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0
当oom-killer发生时,linux会选择杀死该进程,例如:
Out of memory: Kill process 21809 (redis-server) score 951 or sacrifice child
Killed process 21809, UID 0, (redis-server) total-vm:33466920kB, anon-rss:32324096kB, file-rss:100kB
具体杀死哪个进程取决于选择进程的函数,选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数
会计算每个进程的点数(0~1000)。
点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且 oom_score_adj可以被
设置(-1000最低,1000最高)。
理解memory overcommit的关键:commit(或overcommit)针对的是内存申请,内存申请不等于内存分配,内存
只在实际用到的时候才分配。
备注:
如何修改Linux vm.overcommit_memory的值,可用的方法有以下三种:
1).以root身份登录Linux,编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效
2).sysctl vm.overcommit_memory=1
3).echo 1 > /proc/sys/vm/overcommit_memory
linux内核killler,Linux内核参数overcommit_memory和OOM killer介绍相关推荐
- linux内核killler,Linux 的 OOM Killer 机制分析
按需分配物理页面 很多情况下,一个进程会申请一块很大的内存,但只是用到其中的一小部分.为了避免内存的浪费,在分配页面时,Linux 采用的是按需分配物理页面的方式.譬如说,某个进程调用malloc() ...
- linux内核oom,linux OOM killer分析
基本概念 Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀 ...
- 理解和配置 Linux 下的 OOM Killer
原文:http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/ 最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有 ...
- Linux内存清道夫--OOM Killer
1.OOM Killer 1.1.OOM Killer定义 OOM(Out Of Memory) Killer作为linux系统中守护进程,主要在系统内存严重不足时开始工作.出现这种情况是因为服务器上 ...
- linux 内核参数 rss,Linux控制内存的内核参数
环境 Red Hat Enterprise Linux (RHEL) 5.x (X86) 在 X86 高内存设备中,当用户进程使用 mlock() 在常规区域分配大量内存时,可重新使用的 lowmem ...
- Linux内核开发:内核模块参数
目录 使用参数加载模块 module_param宏 读取和更改参数值 验证参数值 声明模块参数数组 有关模块参数的一些说明 在本文中,我们将向模块添加参数.使用参数,您可以在加载模块时访问模块全局变量 ...
- aix内核是linux,linux和aix内核参数检查
安装oracle软件时需要设置操作系统级别的用户限制,后期检查可以使用如下命令,方便问题的排查工作 linux: tail -15 /etc/security/limits.conf tail -30 ...
- 【内核】linux内核启动流程详细分析【转】
转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...
- linux内核报告,Linux升级内核报告.docx
Linux升级内核报告精要 我的Linux 内核升级记录 准备工作内核安装包的下载下载地址为: HYPERLINK "/pub/linux/kernel/" /pub/linux/ ...
最新文章
- 程序运行慢?你怕是写的假 Python
- 蜜糖变砒霜:90%美国公司区块链项目将不再重启
- 微软欢迎所有热爱开源软件的朋友们来投稿![征稿开放时间:2015年8月17日]
- html如何禁止用户缩放,html如何禁止页面缩放
- ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
- ES6新特性_Promise介绍与基本使用---JavaScript_ECMAScript_ES6-ES11新特性工作笔记024
- mysql mangodb哪个简单,mysql和mongodb学哪个更加容易
- python 中的堆栈 用列表实现
- 【1】JVM-内存模型
- daemontools安装和使用
- 移动互联网周刊第二期,不错,推荐给大家
- 对训练样本分布不均的思考
- Docker专题(六)-Docker镜像详解
- 救救我吧,今年27岁,想转行学大数据开发
- RTI路由服务---跨多个平台,系统和网络扩展和集成DDS系统
- 大数据(一)数据采集 3
- 威联通nas怎么更换大硬盘_更换NAS后,数据如何安全处理?聊聊NAS数据安全性那些事...
- Python之正则表达式匹配电话号码和邮箱
- 《离散数学及其应用》读书笔记【一】逻辑和证明
- ibatis使用方法
热门文章
- oracle 删除 queue,C++ stl队列Queue用法介绍:删除,插入等操作代码举例
- Ansible Tower - 使用入门 3 - 通过模板运行 Git 上的 Playbook 和 Role
- 如何在C#中使用反射获取集合元素类型
- MongoDB中的分页–如何真正避免性能下降?
- 中国计算机学会推出 CSP 非专业级别认证
- mysql 阿里云 版本_阿里云虚拟主机mysql已经支持版本切换,支持MySQL 5.7.25
- java 注解 jpa_详解Spring Data JPA使用@Query注解(Using @Query)
- mysql初级知识梳理与练习
- sql两个聚合列相同怎么区分_SQL高级查询(终)
- linux内核进程抢占,Re: Linux中进程能否被抢占