Это похоже на хорошую статью на эту тему: Укрощение убийцы OOM .
Суть в том, что Linux перегружает память. Когда процесс запрашивает больше места, Linux предоставит ему это пространство, даже если это запрашивается другим процессом, исходя из предположения, что никто фактически не использует всю запрашиваемую им память. Процесс получит исключительное использование памяти, которую он выделил, когда он фактически использует ее, а не когда он запрашивает ее. Это делает распределение быстрым и может позволить вам «обмануть» и выделить больше памяти, чем у вас есть на самом деле. Однако, как только процессы начнут использовать эту память, Linux может понять, что она слишком щедра в распределении памяти, которой у нее нет, и ей придется убить процесс, чтобы освободить его. Уничтожаемый процесс основан на оценке с учетом времени выполнения (длительные процессы безопаснее), использования памяти (жадные процессы менее безопасны) и нескольких других факторов, в том числе значения, которое можно настроить, чтобы сделать процесс менее может быть убит. Все это описано в статье более подробно.
Редактировать: А вот другая статья , которая довольно хорошо объясняет, как выбирается процесс (аннотировано некоторыми примерами кода ядра). Самое замечательное в этом то, что он содержит некоторые комментарии к рассуждению , стоящему за различными badness()
правилами.