Отключить выгрузку страниц только для чтения и т. Д. В Linux?

289
BCS

Есть ли какой-нибудь способ предотвратить что-либо в Linux от замены чего-либо, кроме как обратиться к убийце OOM, если у него не хватает физической памяти?

Фон

У меня есть рабочая станция Linux, которая время от времени исчерпывает ОЗУ. Когда это происходит, оно становится невосстановимым. (Это верно независимо от того, включен ли обмен или нет, я видел, что это происходит в обоих направлениях.)

В этом случае я хочу, чтобы OOM killer начал убивать процессы и продолжал делать это до тех пор, пока система не восстановится или не выйдет из строя (или что-то среднее между ними предпочтительнее неопределенного зависания). Интересно, что даже при отключенном свопе этого не происходит, а система дает указания, что это своп (все работает, просто на несколько медленнее).

Моя текущая теория заключается в том, что Linux по-прежнему обменивается данными, которые, по его мнению, поддерживаются диском, например, страницы только для чтения из исполняемых файлов и файлов mmap.

Примечание: я уже потратил некоторые усилия и исчерпал множество методов для ограничения использования памяти. Я не могу сделать много, если больше этого не мешая нормальной работе. Я действительно ищу решение "убей их всех и позволь пользователю разобраться".

0

1 ответ на вопрос

0
jim mcnamara

I do not know if this works on all distributions of Linux.

Make a process less likely to get killed off. nnn = pid

echo -15 > /proc/nnn/oom_adj 

We can make the OOM killer more likely to kill the nnn process by doing the following.

echo 10 > /proc/nnn/oom_adj 

However.

This does not sound like a great solution to me. I would do something about limiting resources on processes long before considering this kind of thing. ulimit is there for exactly this reason. This does not invalidate your current approach if you've already done that. But it does answer the question, I guess. It would require you to:

monitor things and take action to enable kill off

take this kill approach a priori if you 'know' you can live without something. Which raises the question - why is that process running if you can live without it?

Что касается ulimit: 1) В итоге я запускаю несколько десятков процессов, каждый из которых обычно использует ~ 1% ОЗУ, но иногда мне нужно использовать ~ 10%, но не все одновременно. 2) значительная часть времени запуска процесса является «чем-то случайным», и многие из них должны найти допустимые пределы. BCS 9 лет назад 0
Я делаю это для жизни - я нахожу ваш подход неортодоксальным. Если вы (например) запускаете физические модели для собственных исследований - этот подход классный. Если это какая-то производственная коробка, не круто. В производственных системах вы должны найти основную причину / процесс и устранить ее, даже если это означает что-то перекодировать / реорганизовать. Я пошел к изоляции процессов в их собственной виртуальной машине, чтобы наблюдать за ними в изоляции. jim mcnamara 9 лет назад 0
Для моего случая, если это на моей рабочей станции, это по определению непроизводственный. BCS 9 лет назад 0