Я работаю над крупномасштабными наборами данных. При тестировании нового программного обеспечения скрипт иногда подкрадывается ко мне, быстро захватывает всю доступную оперативную память и делает мой рабочий стол непригодным для использования. Я бы хотел, чтобы был установлен лимит оперативной памяти для процесса, чтобы, если он превышает это количество, он автоматически уничтожался. Решение для конкретного языка, вероятно, не будет работать, так как я использую всевозможные инструменты (R, Perl, Python, Bash и т. Д.).
Так есть ли какой-нибудь монитор процесса, который позволит мне установить пороговое количество оперативной памяти и автоматически убить процесс, если он будет использовать больше?
Ответы:
Я ненавижу быть парнем, который отвечает на его собственный вопрос, но этим утром я нашел альтернативный метод, обернутый в милую небольшую утилиту. Это ограничит время процессора или потребление памяти:
https://github.com/pshved/timeout
Сначала я даю этот шанс, но отдаю должное Эми Джа за хороший ответ. Я проверю, если этот не подведет меня.
источник
Я настоятельно советую не делать этого . Как предлагает @chrisamiller, установка ulimit ограничит объем оперативной памяти, доступной для процесса.
Но все же, если вы настаиваете, то следуйте этой процедуре.
Сохраните следующий скрипт как
killif.sh
:Теперь сделайте его исполняемым.
Теперь запустите этот скрипт на терминале. Заменить
PROCID
фактическим идентификатором процесса иSIZE
размером в МБ.Например:
Если
SIZE
установлено значение 100, то процесс будет остановлен, если его использование ОЗУ превысит 100 МБ.Внимание: вы знаете, что вы пытаетесь сделать. Процесс убийства не очень хорошая идея. Если у этого процесса есть какая-либо команда выключения или остановки, отредактируйте сценарий и замените
kill -9
команду этойshutdown
командой.источник
Попробуйте
prlimit
инструмент изutil-linux
пакета. Он запускает программу с ограниченными ресурсами. Он используетprlimit
системный вызов для установки ограничений, которые затем применяются исключительно ядром.Вы можете настроить 16 ограничений, в том числе:
источник
Это было слишком велико, чтобы вместить комментарий. Я изменил оригинальный скрипт Amey, чтобы включить в него
pgrep
, поэтому вместо того, чтобы вручную вводить идентификатор процесса, вы можете просто исключить его по имени. Например,./killIf.sh chrome 4000
убивает любой процесс chrome, который превышает 4 ГБ в использовании памяти.Будьте внимательны, выбирая узкую строку grep и достаточно большой лимит памяти, чтобы избежать ненужного уничтожения непреднамеренных процессов.
источник