您的位置:

oom-killer——避免系统崩溃的利器

一、什么是oom-killer

在Linux操作系统中,当内存不足时,Linux会使用oom-killer来关闭一些进程,以释放内存空间。oom-killer是Linux自带的一个内核机制,它可以识别哪些进程对系统的影响最小,并强制关闭它们,从而避免系统崩溃,保证系统的正常运转。

二、oom-killer的作用

1、保障系统的稳定运行

   如果系统中有一些进程消耗了大量内存,而且这些进程又无法回收这些内存,那么系统的运行就会变得非常不稳定。如果不及时采取措施,很可能会导致系统崩溃。

2、优化系统性能

   当整个系统内存不足时,oom-killer会关闭某些进程来释放内存,这将迫使内核直接回收收缩缓存的页并释放内存。这样可以为内核释放内存空间,为新的缓存和新的传入连接腾出空间。

三、oom-killer的工作原理

oom-killer的工作原理是以OOM_SCORE为标准来确定哪个进程更容易被杀掉。OOM_SCORE是Linux中恶意代码用户进程(例如微信红包跑分)的识别标准。OOM_SCORE的值越高,发生OOM时就越容易被杀掉。OOM_SCORE会根据进程消耗的内存和其他一些因素动态计算。

四、如何使用oom-killer

使用oom-killer时,需要修改/proc/sys/vm/overcommit_memory文件,这个文件中保存着各种OOM行为的配置。具体的修改命令与修改内容如下:

   $ sudo sysctl -w vm.overcommit_memory=1 # 开启overcommit_memory功能
   $ sudo sysctl -w vm.overcommit_ratio=80 # 设置80%的内存预留值

其中,“vm.overcommit_memory”参数表示内核对内存的使用管理策略,其默认值为0,表示不开启此功能。通过设置这个参数,告诉系统要开启进程启动前内存检查功能,提示不足以及其它问题。

如果设置"vm.overcommit_memory=2",表示禁止内核释放任何一块内存,并抛出OOM异常,导致应用强制崩溃。

五、oom-killer的实现过程

   1、内核分配内存时,会产生一个新的结构体vm_area_struct,并加入到进程的虚拟地址空间。
   2、在用户态,如果进程申请内存成功,则会返回一个指向被分配内存的指针。
   3、但是,在OOM时,内核尝试释放一些悬空的或可回收的物理页,以释放部分内存。在此之后,如果内存依然不足,那么oom-killer将会介入进程的内存。
   4、OOM_SCORE最高的进程被杀掉,oom-killer通知这个进程被杀掉的原因(OOM)和释放的内存量。
   5、oom-killer然后重复上面的步骤,直到系统有足够的内存为止。

六、你需要知道的防止oom-killer方法

1、增加系统内存

   增加系统内存是最直接有效的防止OOM的方法。内存越大,越能够容纳更多的进程和应用程序。

2、限制进程的内存使用量

   使用一些工具,如cgroup限制进程的内存使用量,以避免某个进程占用大量内存导致系统出现OOM故障。

3、使用Swap空间

   在Linux中,Swap是虚拟内存的一种形式,它允许在物理内存不足的情况下将部分内存转移至硬盘上来解决OOM问题。

七、总结

通过本文对oom-killer的详细介绍,我们了解了oom-killer的概念、作用、工作原理和如何应用它来避免系统崩溃。在日常使用中,要注意使用合理的内存管理策略和一些防止OOM的方法,保证系统的稳定运行。