OOM killer 是一个由内核在可用内存非常低的时候使用的进程。它的主要任务是不断的杀死进程,直到释放出足够的内存,使内核正在运行的其它进程能顺利运行。OOM killer 会找到系统中最不重要并且能释放出最多内存的进程,然后杀掉他们。在/proc目录下的pid目录中,我们可以看到每个进程的oom_score。
示例:
$cat/proc/10299/oom_score
一个进程的oom_score的值越高,这个进程越有可能在系统内存耗尽的时候被 OOM killer 杀死。
Early OOM 的开发者表示,相对于内置的 OOM killer,Early OOM 有一个很大的优点。就像我之前说的那样,OOM killer 会杀掉oom_score***的进程,而这也导致 Chrome 浏览器总是会成为***个被杀死的进程。为了避免这种情况发生,Early OOM 使用/proc/*/status而不是echo f > /proc/sysrq-trigger(LCTT 译注:这条命令会调用 OOM killer 杀死进程)。开发者还表示,手动触发 OOM killer 在***版本的 Linux 内核中很可能不会起作用。

安装 Early OOM

Early OOM 在AUR(Arch User Repository)中可以找到,所以你可以在 Arch 和它的衍生版本中使用任何 AUR 工具安装它。
pacaur-S earlyoompacker-S earlyoomyaourt-S earlyoom
启用并启动 Early OOM 守护进程:
sudosystemctl enable earlyoomsudosystemctl start earlyoom
在其它的 Linux 发行版中,可以按如下方法编译安装它:
gitclone https://github.com/rfjakob/earlyoom.gitcd earlyoommakesudomake install

Early OOM - 杀掉无响应 Linux 系统中的***的进程

运行如下命令启动 Early OOM:
earlyoom
如果是通过编译源代码安装的, 运行如下命令启动 Early OOM:
./earlyoom
示例输出:
earlyoom0.12mem total:3863MiB, min:386MiB(10%)swap total:2047MiB, min:204MiB(10%)mem avail:1770MiB(45%), swap free:2047MiB(99%)mem avail:1773MiB(45%), swap free:2047MiB(99%)mem avail:1772MiB(45%), swap free:2047MiB(99%)mem avail:1773MiB(45%), swap free:2047MiB(99%)mem avail:1772MiB(45%), swap free:2047MiB(99%)mem avail:1773MiB(45%), swap free:2047MiB(99%)mem avail:1771MiB(45%), swap free:2047MiB(99%)mem avail:1773MiB(45%), swap free:2047MiB(99%)mem avail:1784MiB(46%), swap free:2047MiB(99%)[...]
就像你在上面的输出中可以看到的,Early OOM 将会显示你有多少内存和交换区,以及有多少可用的内存和交换区。记住它会一直保持运行,直到你按下CTRL+C。
如果可用的内存和交换区大小都低于 10%,Early OOM 将会自动杀死***的进程,直到系统有足够的内存可以流畅的运行。你也可以根据你的需求配置最小百分比值。
设置最小的可用内存百分比,运行:
earlyoom-m