【随笔】Linux oom_killer_user版本如何查看panic_on_oom的值-程序员宅基地

技术标签: Linux运维  linux  

前情摘要:https://blog.csdn.net/reliveit/article/details/106291631

内核文档:https://www.kernel.org/doc/Documentation/sysctl/vm.txt(本文中的几个重要选项都来自该文档,其他的来自LWN)

 

一、概览

整体流程:

  1. 当系统发生OOM的时候,根据panic_on_oom配置,走系统奔溃还是杀进程
    1. panic_on_oom=0:杀进程,此时根据oom_kill_allocating_task的配置选择进程赴死
      1. oom_kill_allocating_task=0,扫描所有进程,根据算法对进程打分,分高者赴死,此时可以通过oom_score_adj选项控制进程oom_score,手动干预算法。
        1. 早期选项(已失效):文件在/proc/<pid>/oom_adj。范围是[-17 ~ 15],数值越大表示越容易被oom killer杀死。如果进程的oom_adj配置为-17,表示进程禁止被OOM killer杀死。
        2. 现在选项:文件在/proc/<pic>/oom_score_adj。范围是[-1000 ~ 1000],数值越大表示越容易被oom killer杀死。oom_score_adj=-1000,表示完全禁止进程被oom杀死。
      2. oom_kill_allocating_task非0,直接杀死触发OOM的进程;
    2. panic_on_oom=1:见下文
    3. panic_on_oom=2:系统奔溃
  2. 当系统发生OOM的时候,通过oom_dump_tasks可以配置OOM时进程转储

 

二、panic_on_oom

当Linux发生out of memory的时候,会根据panic_on_oom的配置,启用或禁用panic机制。

This enables or disables panic on out-of-memory feature.

If this is set to 0, the kernel will kill some rogue process, called oom_killer. Usually, oom_killer can kill rogue processes and system will survive.

If this is set to 1, the kernel panics when out-of-memory happens. However, if a process limits using nodes by mempolicy/cpusets, and those nodes become memory exhaustion status, one process may be killed by oom-killer. No panic occurs in this case. Because other nodes' memory may be free. This means system total status may be not fatal yet.

If this is set to 2, the kernel panics compulsorily even on the above-mentioned. Even oom happens under memory cgroup, the whole system panics.

The default value is 0. 1 and 2 are for failover of clustering. Please select either according to your policy of failover.

panic_on_oom=2+kdump gives you very strong tool to investigate why oom happens. You can get snapshot.

 

  • panic_on_oom的默认值是0,此时发生OOM,则会杀进程让系统不至于崩溃;
  • 如果panic_on_oom的值设置为1,OOM的时候系统会崩溃死机;
    • 但是如果此时触发OOM的进程是跑在通过mempolicy/cpusets限制资源的节点上,那么这些节点会变成资源耗尽的状态,这时候系统不会崩溃死机,而是会走oom_killer机制杀进程;
  • 如果panic_on_oom的值设置为2,就算是节点做了资源限制,也会导致kernel panic;

panic_on_oom的默认值是0,当系统发生OOM的时候,会杀进程让系统存活下来。那此时系统是怎么杀进程的?随便找一个进程杀死吗?看第二个选项“oom_kill_allocating_task”。

 

三、oom_kill_allocating_task

This enables or disables killing the OOM-triggering task in out-of-memory situations.

If this is set to zero, the OOM killer will scan through the entire tasklist and select a task based on heuristics to kill. This normally selects a rogue memory-hogging task that frees up a large amount of memory when killed.

If this is set to non-zero, the OOM killer simply kills the task that triggered the out-of-memory condition. This avoids the expensive tasklist scan.

If panic_on_oom is selected, it takes precedence over whatever value is used in oom_kill_allocating_task.

The default value is 0.

 

oom_kill_allocating_task这个选项的配置,会在系统OOM的情形下选择什么样的进程被oom_killer杀死。

  • oom_kill_allocating_task默认值是0,此时会扫描所有进程,根据算法给进程打分,最后选择一个oom_score最大的进程赴死(启动时间短但是又占用大量内存);
  • oom_kill_allo
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/reliveIT/article/details/108432119

智能推荐

@德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?-程序员宅基地

文章浏览阅读647次,点赞7次,收藏6次。天锐绿盾加密软件是一款全面保障企业电脑数据和安全使用的加密软件。

XML语法以及DTD的详解_dtdparser.jar 作用-程序员宅基地

文章浏览阅读1.2w次,点赞8次,收藏29次。XML简介:XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。XML标签没有被预定义,需要用户自行定义标签。XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布XML1.0规范。XML被广泛认为是继Ja_dtdparser.jar 作用

雨中冒险2逆向修改_雨中冒险2爆率修改-程序员宅基地

文章浏览阅读6.8k次,点赞6次,收藏12次。雨中冒险2(Risk of Rain 2)破解修改,成就解锁教程_雨中冒险2爆率修改

构建多领域异构数据融合的统一数据集_异构数据融合概念-程序员宅基地

文章浏览阅读593次,点赞26次,收藏9次。构建多领域异构数据融合的统一数据集作者:禅与计算机程序设计艺术1. 背景介绍随着大数据时代的到来,各个领域都产生了大量的异构数据。如何有效地整合和利用这些多源、多类型的数据资源,已经成为当前亟需解决的关键问题。构建一个统一的数据集,不仅能够提高数据的利用效率,还能为跨_异构数据融合概念

Flex绑定数据的方式[转]-程序员宅基地

文章浏览阅读31次。关键字: 数据绑定 在使用Flex开发的过程中,数据绑定是一定会遇到的,这种技术简单,又有点好玩,重要的是它让开发变得简单了。在Flex中,数据绑定的方式有这么三种:直接在“{}”中填写绑定变量 使用<mx:Binding />标签绑定 使用ActionScript中的BindingUtils类绑定 示例1:<mx:...

OpenCV中C++函数imread读取图片的问题_c++ opencv imread读写图片demo-程序员宅基地

文章浏览阅读3.2k次。http://www.cnblogs.com/eyeszjwang/articles/2418354.html#include "stdafx.h"#include &lt;cv.h&gt;#include &lt;highgui.h&gt;#include &lt;math.h&gt;#include &lt;stdlib.h&gt;#include &lt;stdio.h..._c++ opencv imread读写图片demo

随便推点

7-1 3-2计算圆的周长和面积_湖北经济学院李祥圆的周长跟面积-程序员宅基地

文章浏览阅读563次。2021级-JAVA03 基础语法2--控制语句_湖北经济学院李祥圆的周长跟面积

Unity画线(Vectrosity5.6.1插件)_unity vectrosity 插件下载-程序员宅基地

文章浏览阅读4.9k次。Unity画线(Vectrosity5.6.1插件)_unity vectrosity 插件下载

数据杂谈&:CIO和CTO的区别(首席信息官&首席技术官)_cio大还是cto大-程序员宅基地

文章浏览阅读6.4k次。首席信息官(又称CIO,chief information officer的缩写),中文意思大概是“首席信息官”或者“信息主管”,是负责公司信息即使是和系统所有领域的高级官员。产生背景现代企业正常运营,要靠物流,资金和信息流的畅通为基础,与企业信息化进程和企业流程再造密切相关。中国企业纷纷开始设立首席信息官这个职位。在人们的印象中,中国的IT应用市场一贯是金融与电信两大行业唱主角。据统计,2001年中国银行信息化建设投资的总体规模为260亿元,同年电信业行业信息化的整体市场规模为427.8亿元。另一个_cio大还是cto大

基于minio及tus断点续传及断点下载解决方案_tus断点续传window版本-程序员宅基地

文章浏览阅读6.3k次,点赞2次,收藏8次。本篇主要用来说明基于minio文件存储的断点续传及断点下载的解决方案1.断点续传断点续传功能采用Tus+Minio结构,其中Minio作为文件存储服务器,提供文件存储功能。Tus是开源的断点续传的框架,用于连接Minio并提供统一的接口供客户端连接。服务端由go编写,客户端提供多种语言,如js、java、androidtus及minio, docker-compose.yml文件:version: '3.3'services: minio-server: image: min_tus断点续传window版本

mybatis并发数据库报错,数据库操作对象已关闭_cannot commit, transaction is already closed-程序员宅基地

文章浏览阅读3.7k次。最近在使用mybatis做数据库管理的时候出现了一个问题,因为只是一个控制台项目,所以没有整合spring,只是用了mybatis默认的一些数据库配置信息。然后再与前端做交互的时候前端并发访问总是会出现这几个错误:Cannot commit, transaction is already closed### Cause: org.apache.ibatis.executor.Execu_cannot commit, transaction is already closed

HDU1010 Tempter of the Bone (DFS & 奇偶剪枝)_http ://blog .csdn. net/huangwen纬i1010-程序员宅基地

文章浏览阅读171次。Tempter of the BoneTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 114735 Accepted Submission(s): 31170Problem DescriptionThe_http ://blog .csdn. net/huangwen纬i1010

推荐文章

热门文章

相关标签