Debian 9.4, Linux 4.9

Я иногда компилирую что-то, что едва умещается в ОЗУ, или процесс румян внезапно начинает поглощать память сверх того, что доступно. Когда процесс проходит через доступную оперативную память, Linux начинает перебивать диск, даже если у меня включен нулевой своп (никакой своп не был попыткой избежать этого). Я предполагаю, что он начинает отбрасывать и перезагружать такие вещи, как части mmap ped исполняемых файлов в данный момент?

На этом этапе мой сеанс X быстро перестает отвечать, и все, что я могу сделать, это подождать десятки минут, пока весь сеанс X не будет уничтожен, и я смогу снова войти в систему.

Я пытался найти решения, но ничего не помогло. Убийца OOM не улавливает этот процесс, и с vm.overcommit_memory=2 я даже не могу войти в систему с помощью GDM и Gnome.

Есть ли способ сказать Linux не менять местами вообще? Таким образом, я бы по крайней мере получил шанс, что процесс румян будет убит неудачным malloc , и даже если нет, по крайней мере, мне не пришлось бы ждать, глядя на неотзывчивую машину.

Или какие-то другие советы, как управлять этим сценарием?

1 ответ1

2

Если вы компилируете источники, которые требуют почти всей доступной оперативной памяти, если не больше, вероятно, единственное эффективное решение - это добавление реальной оперативной памяти. Сказав это, вы можете попробовать добавить очень большой объем подкачки (скажем, в 2 или 3 раза больше оперативной памяти) и установить /proc/sys/vm/swappiness в низкое значение, например 1 (обратите внимание, что для ядра 3.5+ установите его в 0 полностью отключает swap), так что swap используется только в случае необходимости. Это должно минимизировать побои.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .