Могу поспорить, что система на самом деле не «зависла» (в том смысле, что ядро зависло), а скорее просто не отвечала. Скорее всего, он просто очень сильно менялся, что приводило к падению интерактивной производительности и пропускной способности системы.
Вы можете отключить подкачку, но это только изменит проблему с низкой производительности на процессы, убитые OOM (и все интересное, что вызывает), наряду со снижением производительности из-за уменьшения доступного дискового кэша.
С другой стороны, вы можете использовать ограничения ресурсов для каждого процесса (обычно называемые rlimit
и / или ulimit
), чтобы исключить возможность того, что один процесс займет смешной объем памяти и вызовет перестановку, но это просто толкает вас на интересную территорию с процессами, которые умирают при неудобные моменты, потому что они хотели немного больше памяти, чем система хотела дать им.
Если вы знали, что собираетесь сделать что-то, что может вызвать массовое использование памяти, вы, вероятно, могли бы написать программу-обертку, которая выполняла бы mlockall()
и затем выполняла вашу оболочку; это сохранило бы его в памяти, и было бы самым близким к тому, чтобы «сохранить отзывчивое ядро», которое вы, вероятно, получите (потому что проблема не в том, что процессор перегружен).
Лично я подписываюсь на метод управления ресурсами «не делай глупостей». Если у вас есть root, вы можете нанести системе всевозможные повреждения, и делать что-либо, о чём вы не знаете, вероятные результаты - рискованное дело.