Repolode
rfjakob

rfjakob/earlyoom

一个轻量的 Linux 用户态守护进程,在内存和 swap 耗尽导致系统卡死前,提前结束占用最多内存的进程。

Star
4,351
Fork
215
未关闭 Issue
28
最近提交
前天

这是什么?

earlyoom 是一个运行在 Linux 上的轻量守护进程,持续监控可用内存和空闲 swap,在内核自带的 OOM killer 介入之前提前结束进程。内核的 OOM killer 通常要等系统几乎无法响应、先经历大量 swap 和缓存回收后才动手,earlyoom 则在用户态以每秒最多十次的频率检查内存。

默认情况下,当可用内存和空闲 swap 同时低于总量的 10% 时,earlyoom 会向 oom_score 最高的进程发送 SIGTERM。阈值、SIGKILL 的触发条件以及目标进程的选择都可以通过 --prefer、--avoid、--ignore、--sort-by-rss 等参数调整。程序使用纯 C 编写,没有外部依赖,并通过 mlockall() 锁定自身内存,以便在内存紧张时仍能运行。

可以从源码编译安装,注册为 systemd 或 init.d 服务,也可以通过 Debian、Ubuntu、Fedora、Arch 等发行版的软件包安装。它还支持 d-bus 桌面通知,以及每次击杀进程后执行的脚本(-N 和 -P)。

核心功能

  • 01每秒最多检查内存和空闲 swap 十次。
  • 02先发送 SIGTERM,再发送 SIGKILL,阈值可配置。
  • 03默认按 oom_score 选择目标,也可用 --sort-by-rss 按常驻内存选择。
  • 04支持 --prefer、--avoid、--ignore 正则参数控制击杀对象。
  • 05可选 d-bus 桌面通知,以及击杀前后执行的脚本。
  • 06纯 C 编写,无外部依赖,提供 --dryrun 演练模式。

适用场景

  • 浏览器或 IDE 内存泄漏时,保持桌面或笔记本电脑的响应速度。
  • 保护共享的 Linux 服务器或编译机,避免失控进程拖垮整机。
  • 在内存较小的虚拟机或单板机上运行,减少 swap 频繁抖动导致的卡顿。
  • 内存压力导致进程被击杀时,触发告警或清理脚本。

标签

常见问题

earlyoom 是什么?
一个轻量的 Linux 用户态守护进程,在内存和 swap 耗尽导致系统卡死前,提前结束占用最多内存的进程。 earlyoom 是一个运行在 Linux 上的轻量守护进程,持续监控可用内存和空闲 swap,在内核自带的 OOM killer 介入之前提前结束进程。内核的 OOM killer 通常要等系统几乎无法响应、先经历大量 swap 和缓存回收后才动手,earlyoom 则在用户态以每秒最多十次的频率检查内存。
earlyoom 可以免费使用吗?用的什么许可证?
earlyoom 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
earlyoom 还在维护吗?
活跃维护中。earlyoom 最近一次提交是在 2026年10月19日。
earlyoom 适合用来做什么?
浏览器或 IDE 内存泄漏时,保持桌面或笔记本电脑的响应速度。 保护共享的 Linux 服务器或编译机,避免失控进程拖垮整机。 在内存较小的虚拟机或单板机上运行,减少 swap 频繁抖动导致的卡顿。 内存压力导致进程被击杀时,触发告警或清理脚本。
在哪里获取 earlyoom?
源代码和安装说明在 GitHub 上:https://github.com/rfjakob/earlyoom

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目