earlyOOM
简介
earlyoom 是一个用户态 OOM 监控守护进程。核心逻辑:
- 定期读取系统内存与交换分区信息
/proc/meminfo。 - 当“可用内存”和“可用交换分区”同时低于阈值时,选择一个“最应当被杀”的进程并发送信号(先 SIGTERM,必要时升级到 SIGKILL)。
- 进程选择依据:默认最大
oom_score,可选按最大 RSS(--sort-by-rss)。 - 强化逻辑:进程组杀、偏好/避免/忽略正则、D-Bus/外部脚本通知、
process_mrelease尽快释放内存、适配proc hidepid等。
主要模块与职责:
- main.c:参数解析、启动自检、锁内存、主轮询循环
poll_loop() - meminfo.c:解析
/proc/meminfo,提供百分比与衍生指标,活性检查is_alive() - kill.c:选择受害者
find_largest_process(),对比逻辑is_larger(),发送信号与等待退出kill_wait(),process_mrelease - proc_pid.c:解析
/proc/[pid]/stat(进程状态、ppid、线程数、rss 页数) - msg.c:
日志/颜色/(可选)syslog,参数解析辅助 globals.*:全局开关与/proc路径