Приоритеты работы программ в Linux

Дмитрий Корнев
7 апреля 2016

Процесс создания бэкапов или запуск других тяжёлых скриптов может сопровождаться существенным отъеданием ценных ресурсов процессора и диска. Из-за этого другие задачи, может быть более важные, начинают выполняться с существенными тормозами. В статье об утилитах и способах, которые помогут с этим бороться.

Типичная ситуация. Имеем веб-сервер, на котором по расписанию создаются бэкапы. Естественно, что очень не желательно, чтобы в момент, когда это происходит, падала производительность. Бекапы – это хорошо. Но главное, чтобы веб-сервер исправно выполнял свою основную функцию.

Есть две программы: nice и ionice.

nice — позволяет изменить для программы приоритет выполнения процессором. Формат использования:

nice -n 19 команда

Здесь число 19 задаёт наименьший приоритет. можно использовать цифры в диапазоне от -20 до 19. Соответственно -20 — это наибольший приоритет. Если приоритет не задается принудительно, то считается, что он равен 0. Примеры использования:

nice -n 19 tar -czf /tmp/pack.tar.gz dir
nice -n 19 backup.sh

ionice — позволяет изменить для программы приоритет при операциях ввода/вывода. Формат использования:

ionice -c2 -n7 команда

Здесь первое число задаёт класс, а второе приоритет. Класс задаётся цифрой от 1 до 3, означают они следующее:

  1. Real time — преимущество при операциях, без обращения внимания на работу других процессов. При этом дополнительно задаётся приоритет от 0 до 7. Минимальный приоритет это 7.
  2. Best Effort — класс используется по умолчанию. Аналогично дополнительно задаётся приоритет от 0 до 7. Минимальный приоритет это 7.
  3. Idle — операции ввода/вывода допустимы только в случае, если их требуют другие программы. В общем, когда диск простаивает без дела. Приоритет в данном случае не задаётся.

Примеры использования:

ionice -c2 -n7 tar -czf /tmp/pack.tar.gz dir
ionice -c3 backup.sh

Можно совместить использование nice и ionice, пример:

nice -n 19 ionice -c2 -n7 tar -czf /tmp/pack.tar.gz dir

Можно добавлять эти команды прямо в крон:

0 3 * * * nice -n 19 ionice -c2 -n7 /home/backup_script.sh

В данном случае все команды, которые есть в файле backup_script.sh будут выполняться с заданными приоритетами.

Если не помогает

Особенно актуально, когда на веб-сервере жутко тормозной диск. Расставленные приоритеты, как показано выше, не дают эффекта.

Существует утилита pv — это сокращенно pipeviewer. Установка:

apt install pv

Pipe — это канал, конвейер. Такие создаются при упаковке файлов, копировании и т.д. Утилита позволяет смотреть и контролировать их.

Пример упаковки каталога в архив:

tar cvzf - нужный_каталог | pv -L 1m >архив.tar.gz

Здесь при помощи утилиты pv мы ограничиваем пропускную способность канала до 1Мб в секунду. Значение подбирайте свое, по ситуации.

Комментарии