OOM-killer kill重要进程的问题解决

本文深入解析Linux中OOM-Killer的工作原理,探讨内存不足时如何通过调整内核参数和进程OOM_Score来避免关键进程被误杀,提供实用技巧以确保系统稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言



下面介绍的是防止Linux中OOM-killer杀死重要进程的操作。
(不写前言感觉没有灵魂。。就随便写一句)



OOM-killer简介



linux oom-killer的机制: (oom就是out of memory,内存用尽)linux为了避免内存用尽,导致系统的卡死,会唤醒oom_killer,找出/proc/pid/oom_score值最大的进程将之kill掉,从而释放内存,来保证整个系统的的正常运行。

oom机制:按照oom_score 给进程排序, oom_score越大, 进程就越容易被系统杀死, oom_score值的范围是-17—15, -17表示禁止oom

因此这是内存不足导致的,解决方法通常有以下几种:
在服务器上直接增加内存条(还得停机,云服务器直接扩充内存)
查找占据大量内存的服务进行清理或迁移(无需停机,但是需要准备迁移的目标)
调整服务的内存占用大小(无需停机,无需迁移;如果实例较多,仍是杯水车薪,即使调整了,服务也会容易被kill)



如何确定是OOM问题?


暂无截图,多会儿再出问题了想起再贴


cat /proc/kmsg  
or
dmesg
or
more /var/log/messages

查找当天日志,在服务异常的大致时间内出现OOM-killer or Out of memory,即可确认



保护重要进程



<1>禁用重要进程OOM

echo -17 > /proc/<pid>/oom_adj

pid为要保护的那个进程的pid
-17表示禁用OOM



<2>禁用整个系统OOM


不建议,易导致系统卡死或宕机


sysctl -w vm.panic_on_oom=1 (默认为0开启;1禁止)
sysctl -p


<3>通过调整内存相关的内核参数


0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2:表示内核允许分配超过所有物理内存和交换空间总和的内存。

临时生效: 
sysctl vm.overcommit_memory=0  
sysctl vm.overcommit_memory=1  
sysctl vm.overcommit_memory=2 


永久生效: 
vim /etc/sysctl.conf
vm.overcommit_memory=1
 
sysctl -p 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

漠效

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

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

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

打赏作者

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

抵扣说明:

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

余额充值