龙叔Linux:OOM killer

185 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


你了解OOM killer吗?

OOM killer 是linux进行自我保护的一个机制,内核检测到内存不足的时候,会挑选并杀掉某个进程以释放内存,避免服务器内存撑满。

为什么会出现内存不够的情况呢?

然而不少初接触Linux的朋友就会问了:进程不应该是按需分配内存吗,没有了就不分配吗,怎么会有内存不足的情况呢?

这就是linux另一个高明的机制,linux的内核会根据应用程序的要求来分配内存,但是应用程序不可能一直将分配给它的所有内存都用满,所以为了最大化的利用内存,让每一份内存都发挥最大作用,Linux有一个叫过度分配内存(over-commit-memory)的策略

一般来说这个机制时没有问题,但是如果有个时间,出西安比较极端的情况:每个应用程序都将自己的内存都消耗光了,那么这个时候,所有应用程序的内存之和就是大于实际物理内存的,这个时候就需要出发OOM killer机制来杀掉一部分进程,来避免内存使用爆满。

正常情况:日常应用程序没有消耗到自己分配的最大内存,运行无问题

异常情况:某个时间,各个应用程序都将分配给自己的内存消耗光了,那么各个应用程序用的内存之和就大于实际物理内存了,也就出现问题需要OOM killer了

如何避免OOM killer的发生?

超分是服务器资源利用率最大化的一个合理机制,所以我们只能从监控和规划上去避免:

【1】做好监控,当内存使用达到设定的告警阈值,人工干预,保证重要服务不受影响

【2】合理划分内存