Serve Laurijssen Asked: 2023-12-18 15:31:39 +0800 CST2023-12-18 15:31:39 +0800 CST 2023-12-18 15:31:39 +0800 CST linux 在 OOM 时会杀死哪些进程? 772 当机器内存不足时,Linux 是否有杀死哪些进程的规则? 它会杀死占用最多内存的进程吗?或者最新的左右? kernel 1 个回答 Voted Best Answer Artur Meinild 2023-12-18T16:31:59+08:002023-12-18T16:31:59+08:00 kernel.org 上有一些关于 OOM 如何选择要终止的进程的信息(来自 Mel Gorman 的书《Understanding the Linux Virtual Memory Manager》):(请注意,这些信息来自 Linux 内核 2.6 时) 13.3 选择进程 该函数select_bad_process()负责选择要终止的进程。它通过单步执行每个正在运行的任务并计算它是否适合使用函数杀死来做出决定 badness()。坏度计算如下,请注意,平方根是使用 计算的整数近似值int_sqrt(); badness_for_task = total_vm_for_task / (sqrt(cpu_time_in_seconds) * sqrt(sqrt(cpu_time_in_minutes))) 选择此选项是为了选择使用大量内存但寿命不长的进程。运行时间较长的进程不太可能是内存不足的原因,因此此计算很可能会选择使用大量内存但运行时间不长的进程。如果进程是根进程或具有CAP_SYS_ADMIN功能,则分数除以四,因为假定根权限进程表现良好。同样,如果它具有CAP_SYS_RAWIO功能(访问原始设备)特权,则分数将进一步除以 4,因为不希望终止可直接访问硬件的进程。 总结一下:OOM 选择一个符合使用大量内存标准但寿命不长的进程。此外,如果进程以管理员权限运行root(或以其他方式具有管理员权限),则被终止的可能性会降低 4 倍。 就是这样。
kernel.org 上有一些关于 OOM 如何选择要终止的进程的信息(来自 Mel Gorman 的书《Understanding the Linux Virtual Memory Manager》):(请注意,这些信息来自 Linux 内核 2.6 时)
总结一下:OOM 选择一个符合使用大量内存标准但寿命不长的进程。此外,如果进程以管理员权限运行
root
(或以其他方式具有管理员权限),则被终止的可能性会降低 4 倍。就是这样。