`
xinklabi
  • 浏览: 1587743 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

linux oom killer导致应用进程杀掉交易事务回滚

 
阅读更多

前段时间,公司同事遇到这样的问题,A系统通过RPC调用B系统,调用之前会在本地落单据,与RPC是在同一事务中。后来出现A应用挂掉,引发的问题是发现B返回给A系统,找不到相关流水,最后发现是linux在内存吃紧的情况下,会杀掉占用最大的进程,导致了数据库事务的回滚,但是RPC调用成功了,这是一个容易疏忽的不一致点。

 

 

Linux OOM-killer
 
前天线上出了个502错误,经排查是某开发人员写了条性感的程序吃掉了大部分内存,触发OOM-killer杀死Nginx
查看日志/var/log/messages发现类似"Out of Memory: Kill process..."错误
以前不了解OOM-killer{out of memory killer },今天碰巧放假一天,借此学习下,涨涨姿势!
 
OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味
在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/<pid>/oom_score最大者并将之kill掉
 
为了保护重要进程不被oom-killer掉,我们可以:echo -17 > /proc/<pid>/oom_adj,-17表示禁用OOM
我们也可以对把整个系统的OOM给禁用掉:
sysctl -w vm.panic_on_oom=1
sysctl -p
 
值得注意的是,有些时候 free -m 时还有剩余内存,但还是会触发OOM-killer,可能是因为进程占用了特殊内存地址
 
平时我们应该留意下新进来的进程内存使用量,免得系统重要的业务进程被无辜牵连
可用 top M 查看最消耗内存的进程,但也不是进程一超过就会触发oom_killer
参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略
当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许
当overcommit_memory=1 永远允许进程overcommit
当overcommit_memory=2 永远禁止overcommit
 
分享到:
评论

相关推荐

    Linux系统的OOM Killer处理机制.docx

    Linux系统的OOM(Out of Memory)Killer处理机制是一种内核机制,用于在系统内存不足时杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。OOM Killer的触发条件是系统内存不足,具体来说是当系统的物理内存...

    有关OOM KILLER的一些理解

    当系统内存资源紧张时,OOM Killer会根据一系列策略和算法来判断哪些进程应当被“杀死”。这个过程涉及到了几个核心的源代码文件,如`badness.c`、`selectbadprocess.c`和`outofmemory.c`。 `badness.c`包含了计算...

    MySQL OOM 系统二 OOM Killer

    OOM Killer会选择性地杀死某些进程以回收内存。这一机制主要针对系统可用内存(包括Swap空间)即将耗尽的情况,其目的是确保系统的稳定性和关键服务的正常运行。 OOM Killer的选择过程并不简单地基于哪个进程消耗...

    lab8_oom实验说明1

    《理解Linux OOM Killer机制:从lab8_oom实验入手》 Linux操作系统的OOM (Out-Of-Memory) Killer是一个重要的内存管理机制,用于处理系统内存不足的情况。当系统资源极度紧张,无法分配新的内存时,OOM Killer会...

    heart_oom_protect:Erlang库可保护心脏免受Linux内核的OOM Killer的杀害

    不幸的是,对于Erlang应用来说,一旦被OOM Killer选中,可能导致整个集群的不稳定。 **heart_oom_protect库的功能** heart_oom_protect库专为Erlang OTP设计,其核心功能是监控系统内存状态并在接近OOM时采取行动。...

    android 11源码中如何提高应用oom_adj级别,保活应用(csdn)————程序.pdf

    提高`oom_adj`值可能会导致其他应用的性能受到影响,因为系统会优先保障具有较高`oom_adj`值的应用。因此,除非绝对必要,否则应谨慎使用这种策略,以免破坏整体系统的内存管理平衡。 综上所述,通过理解Android ...

    oom.rar_legacy

    在Linux系统中,当系统内存不足时,OOM killer会被触发,它会选择并终止某些进程以回收内存,从而防止系统完全崩溃。描述提到的“oom_adj”是Linux内核中的一个参数,用于调整进程的OOM分数。将其设置为-17意味着这...

    【性能】OOM原理解析:LowMemoryKiller原理

    随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足, 那么需要一个能管理所有进程,根据一定策略来释放进程的策略,这便有了lmk,全称为LowMemoryKiller(低内存杀手),lmkd来决定什么...

    MySQL Slave 触发 oom-killer解决方法

    在这种情况下,Linux内核会启动oom-killer机制来杀死消耗内存最多的进程,以保护系统的稳定性。针对这个问题,我们可以从多个角度进行排查和解决: 1. **检查InnoDB Buffer Pool**: - `innodb_buffer_pool_size` ...

    安卓内存OOM分析

    例如,理解Linux内核的oom killer机制,它根据每个进程的oom_score来决定优先杀死哪个进程。oom_score是基于进程的内存使用情况和其他因素计算出来的,较高的值表示更容易被杀死。 此外,内核层面的优化还包括调整...

    大量加大drawable下图片,导致OOM,使用二次裁剪

    当应用程序加载过多的大尺寸图片时,可能会触发"Out Of Memory"(OOM)错误,导致应用崩溃。这个问题在标题“大量加大drawable下图片,导致OOM,使用二次裁剪”中被提及,暗示了解决这一问题的一种策略——二次裁剪...

    MySQL OOM(内存溢出)的解决思路

    大部分情况下,会杀掉导致OOM的进程,然后系统恢复。通常我们会添加对内存的监控报警,例如:当memory或swap使用超过90%时,触发报警通知,需要及时介入排查。 如果已经出现OOM,则可以通过dmesg命令查看,CentOS7...

    【嵌入式软件工程师面经】Linux系统编程(线程进程).pdf

    ### 嵌入式软件工程师面经:Linux系统编程(线程进程) ...29. **OOM Killer**:当系统内存不足时,内核会启动OOM Killer来杀死某些进程。 30. **使用ioctl()系统调用**:用于对文件描述符执行设备相关的输入输出操作。

    Groovy大量计算导致oom的解决办法

    问题原因分析:使用ScriptEngine.eval每次都会对脚本进行编译,生成一个新的类,被GroovyClassLoader加载,大量执行计算后,将导致被加载的类数量不断增加,最终OOM。 解决办法:对计算的表达式expression进行预...

    Android LMK机制简介

    oom killer(Out-of-Memory Killer)是在极端低内存情况下启动的一个机制,它的目的是通过杀死某些进程来释放足够的内存供其他进程使用。 **1.2.1. oom killer 设计原则** oom killer的设计遵循了几个基本原则: 1. ...

    MySQL OOM 系列一 Linux内存分配

    当系统内存(包括Swap)即将耗尽时,OOM Killer会选择性地杀死一些进程以释放内存。这通常是最后的手段,因为杀死进程可能会导致数据丢失和服务中断。 在后续章节中,我们将深入探讨Linux OOM Killer的工作机制,...

    Android 内核分析报告4

    尽管LMK和标准Linux内核中的OOMKiller在设计思想上有许多相似之处,但两者之间还是存在一些重要的区别: 1. **实现方式:** LMK是作为一个Shrinker实现的,而OOMKiller则是在内存分配时被调用(如果内存资源非常...

Global site tag (gtag.js) - Google Analytics