Как ограничить время и использование памяти процессов в Linux

Сценарий timeout – это полезная программа мониторинга ресурсов для ограничения времени и потребления памяти процессов в Linux. Он позволяет запускать программы под контролем, накладывать ограничения на время и память, завершая программу при нарушении этих параметров.

Не требуется установка, просто выполните команду вместе с аргументами, используя программу timeout, и она будет контролировать потребление памяти и времени команды, прерывая процесс при выходе за пределы, и уведомляя вас заранее определенным сообщением.

Для запуска этого сценария вам необходимо установить Perl 5 на вашу систему Linux и смонтировать файловую систему /proc.

Чтобы проверить установленную версию Perl на вашей системе Linux, выполните следующую команду.

$ perl -v
Check Perl Version in Linux

Затем клонируйте репозиторий timeout на вашу систему, используя команду git, затем перейдите в локальный репозиторий, используя команду cd и вызовите его как обычную команду Linux.

$ cd ~/bin
$ git clone https://github.com/pshved/timeout.git
$ cd timeout

Давайте теперь посмотрим, как работает сценарий timeout. Ограничение памяти по умолчанию (100M виртуальной памяти):

Основное ограничение памяти (100М виртуальной памяти):

В этом первом примере показано, как ограничить использование памяти процессом до 100М виртуальной памяти, используя флаг -m. По умолчанию единица измерения памяти – килобайты.

Здесь команда stress-ng запускает 4 стрессора виртуальной памяти (VMS), которые в сумме используют 40% доступной памяти в течение 10 минут. Таким образом, каждый стрессор использует 10% доступной памяти.

$ ./timeout -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
Limiting Memory of Process

Учитывая вывод команды timeout выше, рабочие процессы stress-ng были завершены всего через 1,16 секунды. Это связано с тем, что совокупное потребление памяти VMS (438660 килобайт) превышает разрешенное использование виртуальной памяти для stress-ng и его дочерних процессов.

Основное ограничение времени процесса:

Чтобы включить ограничение времени процесса, используйте флаг -t, как показано.

$ ./timeout -t 4 stress-ng --vm 4 --vm-bytes 40% -t 10m
Time Limiting of Process

В приведенном выше примере, когда время stress-ng CPU+SYS превышает определенное значение 4, рабочие процессы убиваются.

Ограничение времени и памяти процесса одновременно

Вы также можете ограничить как память, так и время одновременно следующим образом.

$ ./timeout -t 4 -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

Timeout также поддерживает некоторые продвинутые опции, такие как --detect-hangups, которые включают обнаружение разъединений.

$ ./timeout --detect-hangups -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

Вы можете контролировать лимит памяти RSS (resident set size) с помощью переключателя --memlimit-rss или -s.

$ ./timeout -m 100000 -s  stress-ng --vm 4 --vm-bytes 40% -t 10m

Кроме того, чтобы получить код завершения или сигнал+128 процесса, используйте опцию --confess или -c, как показано.

$ ./timeout -m 100000 -c  stress-ng --vm 4 --vm-bytes 40% -t 10m

Для получения дополнительной информации и примеров использования, смотрите репозиторий Github timeout: https://github.com/pshved/timeout.

Вы также можете найти эти статьи полезными:

  1. Как найти топ-15 процессов по использованию памяти с помощью ‘top’ в пакетном режиме
  2. CPUTool – Ограничение и управление использованием ЦП любого процесса в Linux
  3. Как ограничить использование ЦП процессом в Linux с помощью утилиты CPULimit

Скрипт timeout – это простая программа мониторинга ресурсов, которая в основном ограничивает время и потребление памяти процессов в Linux. Вы можете оставить отзыв о скрипте timeout через форму комментариев ниже.

Source:
https://www.tecmint.com/limit-time-and-memory-usage-of-linux-process/