Системным администраторам часто требуется ограничить память и время процессов в Linux, чтобы избежать ненужного потребления ресурсов. Вы можете легко сделать это с помощью скрипта timeout, который не требует установки и может быть запущен непосредственно из терминала. Он позволяет запускать программы с ограничениями по времени и памяти, а программы, нарушающие эти ограничения, автоматически завершаются. Кроме того, вы можете запустить скрипт таймаута таким образом, чтобы он прерывал только нарушающий процесс и отправлял вам заранее определенное уведомление.
Как ограничить память и время процессов в Linux
Для этой цели мы будем использовать perl-скрипт под названием timeout. Он присутствует в виде репозитория на GitHub. Нет необходимости устанавливать его. Вы можете напрямую скачать и запустить его. Вам просто нужно иметь perl 5, установленный в вашей системе, чтобы иметь возможность ограничивать память и время процессов в Linux. Вы можете проверить версию perl с помощью следующей команды.
1 | perl -v |
Скрипт timeout присутствует в виде репозитория на GitHub. Вы можете напрямую клонировать репозиторий timeout, используя следующие команды.
1 2 3 | cd ~/bin git clone https://github.com/pshved/timeout.git cd timeout |
Базовое ограничение памяти
После загрузки скрипта и перехода в его каталог, вы можете использовать его для ограничения памяти, используя опцию -m и указывая память в килобайтах. Вот пример ограничения виртуальной памяти утилиты stress-ng до 100 Мб.
1 | ./timeout -m 100000 stress-ng -t 10m |
Если процесс stress-ng займет больше памяти, то он будет автоматически завершен.
Базовое ограничение времени
Вы также можете использовать скрипт timeout для ограничения времени процесса, используя опцию -t, за которой следует число секунд. Вот пример ограничения времени процесса stress-ng до 4 секунд.
1 | ./timeout -t 4 stress-ng -t 10m |
В приведенном выше примере мы запускаем команду stress-ng в течение 10 секунд, но накладываем на нее временное ограничение в 4 секунды. Поэтому она завершится через 4 секунды.
Ограничение времени и памяти процесса
Вы можете использовать скрипт timeout для ограничения времени и памяти процесса в одной команде. Вот одна команда для указания ограничений на время и память для одного процесса.
1 | ./timeout -t 4 -m 100000 stress-ng -t 10m |
Вы также можете настроить сценарий таймаута на автоматическое обнаружение зависаний с помощью опции -detect-hangups.
1 | ./timeout --detect-hangups -m 100000 stress-ng -t 10m |
Вы также можете контролировать размер резидентного набора с помощью переключателя -memlimit-rss или -s.
1 | ./timeout -m 100000 -s stress-ng -t 10m |
Также, если вы хотите, чтобы команда timeout возвращала код завершения вашего процесса или команды, используйте опцию -c.
1 | ./timeout -m 100000 -c stress-ng -t 10m |
Заключение
В этой статье мы узнали, как ограничить память и время процессов в Linux. Вы можете запускать эти команды через терминал или запускать их из скрипта. Важно следить за памятью и временем, потребляемым различными процессами в вашей системе, чтобы убедиться, что все работает гладко и не перегружает ваши ресурсы. Timeout - это очень полезный инструмент для системных администраторов и разработчиков, которые хотят контролировать потребление ресурсов процессами, запущенными в системе.