基本概念
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分析相关推荐

  1. linux内核oom,linux OOM killer分析

    基本概念 Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀 ...

  2. linux oom日志分析,oom killer理解和日志分析:知识储备

    oom killer日志分析,这是前篇,准备一些基础知识 带着问题看: 1.什么是oom killer 他是Linux内核设计的一种机制,在内存不足的会后,选择一个占用内存较大的进程并kill掉这个进 ...

  3. (转载)Linux OOM Killer个人总结

    Linux下面有个特性叫OOM killer(Out Of Memory killer),这个东西会在系统内存耗尽的情况下跳出来,选择性的干掉一些进程以求释放一些内存.典型的情况是:某天机器突然登不上 ...

  4. Linux OOM Killer

    如何配置 Linux 内存不足终止程序 本文介绍了 Linux 内存不足 (OOM) 终止程序以及如何查明该程序终止特定进程的原因.文中还介绍了配置 OOM 终止程序的方法,以便更好地适应各种不同环境 ...

  5. 教你写Bug,常见的 OOM 异常分析

    在<Java虚拟机规范>的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生 OutOfMemoryError 异常的可能. 本篇主要包括如下 OOM 的介绍和示例: jav ...

  6. linux内核killler,Linux 的 OOM Killer 机制分析

    按需分配物理页面 很多情况下,一个进程会申请一块很大的内存,但只是用到其中的一小部分.为了避免内存的浪费,在分配页面时,Linux 采用的是按需分配物理页面的方式.譬如说,某个进程调用malloc() ...

  7. (转载)Linux Out-of-Memory(OOM) Killer

    Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释 ...

  8. linux内存管理(十四)-内存OOM触发分析

    在内存分配路径上,当内存不足的时候会触发kswapd.或者内存规整,极端情况会触发OOM,来获取更多内存. 在内存回收失败之后,会进行OOM,OOM的入口是__alloc_pages_may_oom, ...

  9. Linux内核OOM killer机制

    程序运行了一段时间,有个进程挂掉了,正常情况下进程不会主动挂掉,简单分析后认为可能是运行时某段时间内存占用过大,系统内存不足导致触发了Linux操作系统OOM killer机制,将运行中的进程杀掉了. ...

  10. linux进程莫名其妙被kill,Linux进程突然被杀掉(OOM killer),查看系统日志

    Linux进程被杀掉(OOM killer),查看系统日志 基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是 ...

最新文章

  1. 《JavaScript权威指南》笔记(一)
  2. mysql不使用自增_自增ID有什么坏处?什么样的场景下不使用自增ID?
  3. 这个小姐姐真的很火辣......
  4. adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列
  5. 深入理解linux系统下proc文件系统内容
  6. saslauthd mysql_Postfix,saslauthd,mysql,smtp身份验证问题
  7. 疫情期间天天对你“开枪”的额温枪,你知道它的工作原理吗?| 原力计划
  8. idea配置mysql失败_IDEA配置数据库连接失败的问题
  9. 视频教程-基于VUE和Hplus通用后台管理系统(前端篇)-Vue
  10. 软件测试之项目立项与需求评审
  11. Oracle数据库进行简单优化,Oracle数据库性能优化
  12. 远程协助计算机如何开启,远程协助怎么开
  13. DSP你都不知道是啥,还好意思说自己学过嵌入式?
  14. 全面概述什么是人工智能?
  15. Android 报错 : FATAL EXCEPTION:main 解决方法
  16. iReport导出Excel文件一个字段要占用多列问题的解决
  17. 浏览器跳出HTML编码,浏览器如何解析HTML字符编码
  18. currency.js -用于处理货币值的小型轻量级 JavaScript 库(也可以处理数值计算精度问题等)
  19. 窗口桌面置顶(主窗口和子窗口)
  20. UbuntuKylin引领我们走上开放创新之路

热门文章

  1. 2G/3G LAC与4G/5G TAC的协同优化
  2. python中outside loop_python - 如何解决 break outside loop? - SO中文参考 - www.soinside.com...
  3. 2022年:企业绩效管理蓝图
  4. 信息学最全知识点清单
  5. Virtualbox上openSUSE 15.2 Leap安装guest additions
  6. vue 富文本编辑器提取纯文字
  7. PDF怎么转换成Word文档呢?不妨试试这两种方法!
  8. 爬了我的微信好友,原来他们是这样的...
  9. mars java android_Mars Android 接入指南
  10. C语言字符串分割 trimmed simplified split