Томас Хабец предложил добавить в ядро Linux sysctl, который запрещает OOM killer убивать определённые процессы — если ничего другого убить нельзя, пусть лучше ядро паникует. Ответил Андриес Брауэр. И не просто ответил — рассказал историю.
Одна авиакомпания решила экономить: заливать в самолёты меньше топлива. Самолёты легче, тратят меньше, деньги сэкономлены. Правда, иногда топлива не хватало, и самолёт падал. Инженеры придумали специальный механизм OOF — out-of-fuel. В экстренном случае выбирали пассажира и выбрасывали его за борт. При необходимости процедуру повторяли. Появилась целая теория: кого выбрасывать — случайного, самого тяжёлого, самого старого? Должны ли пассажиры платить, чтобы их не выбросили, и тогда жертвой становился бы самый бедный? А если выбрасывают самого тяжёлого — делать ли исключение для пилота? Освобождать ли пассажиров первого класса? Механизм OOF работал, и его активировали время от времени. Но потом он начал срабатывать, даже когда нехватки топлива не было. Просто выбрасывал пассажиров ни с того ни с сего. Инженеры до сих пор изучают, как именно возникает этот сбой.
Брауэр аккуратно намекнул: OOM killer — та же история. Механизм, который должен спасать систему, иногда убивает процессы, когда память ещё есть. И никакой sysctl тут не спасёт.