В сентябре 2004 года разработчик Томас Хабетс вернулся к рабочей станции и обнаружил, что его экран разблокирован. Память закончилась, OOM Killer выбрал жертву и завершил xlock... Для того, чтобы больше такого не произошло, Хабетс предложил список процессов, которые Linux запрещено убивать даже в такой ситуации. Его патч в ядро не вошёл, но позже разработчики добавили настройку приоритетов, поддержку cgroups и отдельный поток для быстрого освобождения памяти.
Несмотря на это, OOM Killer всё равно может снести важный процесс, ведь ядро видит только объём памяти и заданные администратором правила. Если правил нет, то Linux сам решает, кого «убить». Почему и что делать, чтобы этого не произошло — в статье.
Память обещали, но не выдали
Linux разрешает программам запрашивать больше виртуальной памяти, чем система способна обеспечить физически. Процесс вызывает malloc() и получает адрес, но это ещё не значит, что под весь диапазон уже выделены страницы RAM. Реальная память нужна позже, когда процесс начинает читать или записывать эти страницы.