linux OOM killer分析
基本概念
Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。
oom killer机制分析
oom killer是计算出选择哪个进程kill呢?我们先来看一下kernel提供给用户态的/proc下的一些参数:
/proc/[pid]/oom_adj ,该pid进程被oom killer杀掉的权重,介于 [-17,15]之间,越高的权重,意味着更可能被oom killer选中,-17表示禁止被kill掉。
/proc/[pid]/oom_score,当前该pid进程的被kill的分数,越高的分数意味着越可能被kill,这个数值是根据oom_adj运算后的结果,是oom_killer的主要参考。
sysctl 下有2个可配置选项:
vm.panic_on_oom = 0 #内存不够时内核是否直接panic
vm.oom_kill_allocating_task = 1 #oom-killer是否选择当前正在申请内存的进程进行kill
触发oom killer时/var/log/message打印了进程的score:
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758297] [ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758311] [ 399] 0 399 2709 133 2 -17 -1000 udevd
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758314] [ 810] 0 810 2847 43 0 0 0 svscanboot
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758317] [ 824] 0 824 1039 21 0 0 0 svscan
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758320] [ 825] 0 825 993 17 1 0 0 readproctitle
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758322] [ 826] 0 826 996 16 0 0 0 supervise
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758325] [ 827] 0 827 996 17 0 0 0 supervise
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758327] [ 828] 0 828 996 16 0 0 0 supervise
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758330] [ 829] 0 829 996 17 2 0 0 supervise
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758333] [ 830] 0 830 6471 152 0 0 0 run
Apr 18 16:56:18 v125000100.bja kernel: : [22254386.758335] [ 831] 99 831 1032 21 0 0 0 multilog
所以,如果想修改被oom killer选中的概率,禁止或者给oom_adj最小或偏小的值,也可以通过sysctl调节oom killer行为
如何查看OOM日志
grep "Out of memory" /var/log/messages
linux OOM killer分析相关推荐
- linux内核oom,linux OOM killer分析
基本概念 Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀 ...
- linux oom日志分析,oom killer理解和日志分析:知识储备
oom killer日志分析,这是前篇,准备一些基础知识 带着问题看: 1.什么是oom killer 他是Linux内核设计的一种机制,在内存不足的会后,选择一个占用内存较大的进程并kill掉这个进 ...
- (转载)Linux OOM Killer个人总结
Linux下面有个特性叫OOM killer(Out Of Memory killer),这个东西会在系统内存耗尽的情况下跳出来,选择性的干掉一些进程以求释放一些内存.典型的情况是:某天机器突然登不上 ...
- Linux OOM Killer
如何配置 Linux 内存不足终止程序 本文介绍了 Linux 内存不足 (OOM) 终止程序以及如何查明该程序终止特定进程的原因.文中还介绍了配置 OOM 终止程序的方法,以便更好地适应各种不同环境 ...
- 教你写Bug,常见的 OOM 异常分析
在<Java虚拟机规范>的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生 OutOfMemoryError 异常的可能. 本篇主要包括如下 OOM 的介绍和示例: jav ...
- linux内核killler,Linux 的 OOM Killer 机制分析
按需分配物理页面 很多情况下,一个进程会申请一块很大的内存,但只是用到其中的一小部分.为了避免内存的浪费,在分配页面时,Linux 采用的是按需分配物理页面的方式.譬如说,某个进程调用malloc() ...
- (转载)Linux Out-of-Memory(OOM) Killer
Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释 ...
- linux内存管理(十四)-内存OOM触发分析
在内存分配路径上,当内存不足的时候会触发kswapd.或者内存规整,极端情况会触发OOM,来获取更多内存. 在内存回收失败之后,会进行OOM,OOM的入口是__alloc_pages_may_oom, ...
- Linux内核OOM killer机制
程序运行了一段时间,有个进程挂掉了,正常情况下进程不会主动挂掉,简单分析后认为可能是运行时某段时间内存占用过大,系统内存不足导致触发了Linux操作系统OOM killer机制,将运行中的进程杀掉了. ...
- linux进程莫名其妙被kill,Linux进程突然被杀掉(OOM killer),查看系统日志
Linux进程被杀掉(OOM killer),查看系统日志 基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是 ...
最新文章
- 《JavaScript权威指南》笔记(一)
- mysql不使用自增_自增ID有什么坏处?什么样的场景下不使用自增ID?
- 这个小姐姐真的很火辣......
- adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列
- 深入理解linux系统下proc文件系统内容
- saslauthd mysql_Postfix,saslauthd,mysql,smtp身份验证问题
- 疫情期间天天对你“开枪”的额温枪,你知道它的工作原理吗?| 原力计划
- idea配置mysql失败_IDEA配置数据库连接失败的问题
- 视频教程-基于VUE和Hplus通用后台管理系统(前端篇)-Vue
- 软件测试之项目立项与需求评审
- Oracle数据库进行简单优化,Oracle数据库性能优化
- 远程协助计算机如何开启,远程协助怎么开
- DSP你都不知道是啥,还好意思说自己学过嵌入式?
- 全面概述什么是人工智能?
- Android 报错 : FATAL EXCEPTION:main 解决方法
- iReport导出Excel文件一个字段要占用多列问题的解决
- 浏览器跳出HTML编码,浏览器如何解析HTML字符编码
- currency.js -用于处理货币值的小型轻量级 JavaScript 库(也可以处理数值计算精度问题等)
- 窗口桌面置顶(主窗口和子窗口)
- UbuntuKylin引领我们走上开放创新之路
热门文章
- 2G/3G LAC与4G/5G TAC的协同优化
- python中outside loop_python - 如何解决 break outside loop? - SO中文参考 - www.soinside.com...
- 2022年:企业绩效管理蓝图
- 信息学最全知识点清单
- Virtualbox上openSUSE 15.2 Leap安装guest additions
- vue 富文本编辑器提取纯文字
- PDF怎么转换成Word文档呢?不妨试试这两种方法!
- 爬了我的微信好友,原来他们是这样的...
- mars java android_Mars Android 接入指南
- C语言字符串分割 trimmed simplified split