Out of memory: Kill process | 解决进程自动退出问题

目录

零、场景

一、原理

二、查看可能被杀进程

三、解决方法

1.增加内存

2.系统自动重启

3.配置 oom_adj (推荐)

4.关掉 OOM


零、场景

场景是公司A服务器内有块硬盘坏了,准备将A内的虚拟机全部迁移到B,等硬盘更换重建完毕后再切回来。结果B上虚拟机内的服务时常发生崩溃现象。查看了 /var/log/messages 后清一色的:

Out of Memory: Killed process [PID] [process name].

一、原理

这其实是Linux中的一个保护机制: OOM Killer ,其作用是在内存不足时,保全系统不发生严重问题,优先杀掉体量较大的进程。以达到释放内存的目的。

在部分内存还有剩余的情况下, OOM killer 依旧把其它进程杀死了,原因是 Low memory 耗尽,用以下命令可以查看:

free -lm

 Low memory 耗尽后,不管 High memory 还剩多少都会大开杀戒。这里最好的办法是把32位的系统升级到64位,因为64位中所有的内存都变成了 Low memory


二、查看可能被杀进程

运行此脚本,当然你也可以直接粘贴+回车:

#!/bin/bash
for proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do
        printf "%2d %5d %s\n" \
                "$(cat $proc/oom_score)" \
                "$(basename $proc)" \
                "$(cat $proc/cmdline | tr '\0' ' ' | head -c 50)"
done 2>/dev/null | sort -nr | head -n 10

这个脚本会打印出出现OOM后最可能被杀死的十个进程,排名由上而下=优先级从高到低。


三、解决方法

1.增加内存

这个方法最直接,但是需要对虚拟机进行重启操作,本篇不对其进行重点分析(也不需要分析吧)。


2.系统自动重启

sysctl vm.panic_on_oom=1
sysctl kernel.panic=X
echo “vm.panic_on_oom=1” >> /etc/sysctl.conf
echo “kernel.panic=X” >> /etc/sysctl.conf

这段是借鉴来的,用处是在系统出现OOM现象后,自动对系统进行重启(感觉都是重启不如直接加内存了)。


3.配置 oom_adj (推荐)

首先你需要拿到进程的pid,然后对其进行针对性操作。

 oom_adj 的值在 -16   +15 之间,值越高被kill的优先度越高,当该值为-17时,系统将不会杀死指定pid的进程,而-16~15则会使得进程的 /proc/[pid]/oom_adj 值呈指数(K*2^n)形式递增,即它们被杀掉的可能性呈指数递增。针对init(进程号为1)这个进程,无论该值设为多少都不会被杀。

#这会在出现 Out of memory后,尽量不去kill这个进程
echo -15 > /proc/[pid]/oom_adj
#这会在出现 Out of memory后,优先考虑kill这个进程
echo 14 > /proc/[pid]/oom_adjoom
#这会在出现 Out of memory后,不kill该进程
echo -17 > /proc/[pid]/oom_adj

4.关掉 OOM

sysctl vm.overcommit_memory=2
echo “vm.overcommit_memory=2” >> /etc/sysctl.conf

 在不明确后果的情况下,个人不建议这样操作。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会调制解调的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值