- Как установить приоритет процесса Linux с помощью команд nice и renice
- Понимание планировщика ядра Linux
- Понимание приоритета процесса и ценности Nice
- Как проверить хорошую ценность процессов Linux
- Разница между PR или PRI и NI
- Как запустить команду с заданным значением Nice в Linux
- Изменить приоритет планирования процесса в Linux
- Как установить значение Nice по умолчанию для процессов конкретного пользователя
- Приоритеты процессов Linux
Как установить приоритет процесса Linux с помощью команд nice и renice
В этой статье мы кратко объясним планировщик ядра (также известный как планировщик процессов) и приоритет процесса, которые выходят за рамки охват этого руководства. Затем мы немного углубимся в управление процессами Linux: посмотрим, как запустить программу или команду с измененным приоритетом, а также изменить приоритет запущенных процессов Linux.
Читайте также: как контролировать процессы Linux и устанавливать лимиты процессов для каждого пользователя
Понимание планировщика ядра Linux
Планировщик ядра — это модуль ядра, который определяет наиболее подходящий процесс из всех доступных для выполнения процессов для выполнения следующим; он распределяет процессорное время между запущенными процессами в системе. Запускаемый процесс — это процесс, который ожидает только процессорного времени, он готов к выполнению.
Планировщик формирует ядро многозадачности в Linux, используя алгоритм планирования на основе приоритетов для выбора между запускаемыми процессами в системе. Он ранжирует процессы на основе наиболее достойных, а также потребности в процессорном времени.
Понимание приоритета процесса и ценности Nice
Ядро хранит большой объем информации о процессах, включая приоритет процесса, который представляет собой просто приоритет планирования, связанный с процессом. Процессы с более высоким приоритетом будут выполняться раньше процессов с более низким приоритетом, в то время как процессы с одинаковым приоритетом планируются один за другим, многократно.
Всего в Linux реализовано 140 приоритетов и два различных диапазона приоритетов. Первое значение — это значение nice (niceness), которое находится в диапазоне от -20 (значение с наивысшим приоритетом) до 19 (значение с самым низким приоритетом). по умолчанию 0 , это то, что мы раскроем в этом руководстве. Другой — приоритет в реальном времени, который по умолчанию находится в диапазоне от 1 до 99, затем от 100 до 139. предназначены для пользовательского пространства.
Одной из важных характеристик Linux является динамическое планирование на основе приоритетов, которое позволяет изменять ценность процессов (увеличивать или уменьшать) в зависимости от ваших потребностей, как мы увидим позже.
Как проверить хорошую ценность процессов Linux
Чтобы увидеть хорошие значения процессов, мы можем использовать такие утилиты, как htop.
Чтобы просмотреть значение приятности процессов с помощью команды ps в пользовательском формате (здесь столбец NI показывает приятность процессов).
Кроме того, вы можете использовать утилиты top или htop для просмотра значений nice процессов Linux, как показано ниже.
Разница между PR или PRI и NI
Из приведенных выше выходных данных top и htop вы заметите, что есть столбцы с именами PR и PRI . который показывает приоритет процесса.
Следовательно, это означает, что:
- NI – это значение nice, которое является концепцией пользовательского пространства, в то время как
- PR или PRI – фактический приоритет процесса с точки зрения ядра Linux.
Как рассчитать значения PR или PRI
Total number of priorities = 140 Real time priority range(PR or PRI): 0 to 99 User space priority range: 100 to 139
Хороший диапазон значений (NI): от -20 до 19
PR = 20 + NI PR = 20 + (-20 to + 19) PR = 20 + -20 to 20 + 19 PR = 0 to 39 which is same as 100 to 139.
Но если вы видите rt , а не число, как показано на снимке экрана ниже, это в основном означает, что процесс выполняется с приоритетом планирования в реальном времени.
Как запустить команду с заданным значением Nice в Linux
Здесь мы рассмотрим, как расставить приоритеты использования ЦП программой или командой. Если у вас очень ресурсоемкая программа или задача, но вы также понимаете, что ее выполнение может занять много времени, вы можете установить для нее высокий или благоприятный приоритет с помощью команды nice.
$ nice -n niceness-value [command args] OR $ nice -niceness-value [command args] #it’s confusing for negative values OR $ nice --adjustment=niceness-value [command args]
- Если значение не указано, по умолчанию nice устанавливает приоритет 10.
- Команда или программа, запущенная без nice, по умолчанию имеет нулевой приоритет.
- Только root может запускать команду или программу с повышенным или высоким приоритетом.
- Обычные пользователи могут запускать только команду или программу с низким приоритетом.
Например, вместо того, чтобы запускать программу или команду с приоритетом по умолчанию, вы можете запустить ее с определенным приоритетом, используя следующую команду nice.
$ sudo nice -n 5 tar -czf backup.tar.gz ./Documents/* OR $ sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*
Вы также можете использовать третий метод, который немного сбивает с толку, особенно для отрицательных значений приятности.
$ sudo nice -5 tar -czf backup.tar.gz ./Documents/*
Изменить приоритет планирования процесса в Linux
Как мы упоминали ранее, Linux допускает динамическое планирование на основе приоритетов. Поэтому, если программа уже запущена, вы можете изменить ее приоритет с помощью команды renice в такой форме:
$ renice -n -12 -p 1055 $ renice -n -2 -u apache
Из приведенного ниже примера выходных данных top видно, что качество teamspe+ с PID 1055 теперь составляет -12 и для всех процессы, принадлежащие пользователю apache, равны -2 .
Все еще используя этот вывод, вы можете увидеть, что формула PR=20 + NI стоит,
PR for ts3server = 20 + -12 = 8 PR for apache processes = 20 + -2 = 18
Любые изменения, которые вы вносите с помощью команды renice в значения nice процессов пользователя, применимы только до следующей перезагрузки. Чтобы установить постоянные значения по умолчанию, прочитайте следующий раздел.
Как установить значение Nice по умолчанию для процессов конкретного пользователя
Вы можете установить значение nice по умолчанию для конкретного пользователя или группы в файле /etc/security/limits.conf. Его основной функцией является определение лимитов ресурсов для пользователей, вошедших в систему через PAM.
Синтаксис определения лимита для пользователя следующий (возможные значения различных столбцов поясняются в файле):
Теперь используйте приведенный ниже синтаксис, где hard — означает применение жестких ссылок, а soft означает — применение мягких ограничений.
В качестве альтернативы создайте файл в разделе /etc/security/limits.d/, который переопределяет настройки в основном файле выше, и эти файлы читаются в алфавитном порядке.
Начните с создания файла /etc/security/limits.d/tecmint-priority.conf для пользователя tecmint:
# vi /etc/security/limits.d/tecmint-priority.conf
Затем добавьте в него эту конфигурацию:
Сохраните и закройте файл. Отныне любой процесс, принадлежащий tecmint, будет иметь хорошее значение 10 и PR 30.
Для получения дополнительной информации прочитайте справочные страницы nice и renice:
Вы также можете прочитать следующие статьи об управлении процессами в Linux.
- Как найти и остановить запущенные процессы в Linux
- Руководство по командам Kill, Pkill и Killall для завершения процесса в Linux
- Как контролировать использование системы, сбои и устранять неполадки серверов Linux
- CPUTool — ограничение и контроль использования ЦП любым процессом в Linux
В этой статье мы кратко объяснили планировщик ядра, приоритет процессов, рассмотрели, как запустить программу или команду с измененным приоритетом, а также изменить приоритет активных процессов Linux. Вы можете поделиться своими мыслями по этой теме через форму обратной связи ниже.
Приоритеты процессов Linux
Данная тема важна так как позволяет изменять приоритет процессов в операционной системе Linux. Иногда возникает такая ситуация, что необходимо изменить приоритет процессов, какой — то процесс сделать более приоритетным, отдав побольше ресурсов, а какой-то менее приоритетным забрав часть ресурсов сервера. В данной теме мы рассмотрим следующие вопросы:
- Научимся определять приоритеты процессов;
- Рассмотрим, как запускать программы с повышенным приоритетом или с пониженным;
- Посмотрим, как изменять приоритет запущенных программы.
В Linux любой процесс может иметь приоритет от -20 до +19. Во FreeBSD до +20. Максимальным приоритетом считается, тот процесс у которого минимальное число. Т.е. максимальный по приоритету процесс будет иметь число — 20, а минимальный -19 соответственно. Поэтому задача с приоритетом -20 будет выполняться в первую очередь с максимум ресурсов и наоборот задача с +19 будет выполняться в последнюю очередь и минимум ресурсов. Linux для установки приоритетов использует такую программу nice и renice.
Для того, чтобы рассмотреть данную тему воспользуемся командой ps aux . Запуская данную команду мы получаем все сведения о запущенных процессах на данном сервере. Так же мы можем увидеть от какого пользователя данный процесс запущен. Теперь мы используем другой набор ключей для команды ps .
Чтоб получить нам интересующий вывод данных используем команду ps alx .
Мы можем видеть, что получили немного другую информацию. Появилась колонка, промаркированная «NI» и колонка «PRI«. Мы можем видеть, что верхние процессы выполняются с nice 0, т.е. это авторитет по умолчанию, который присваивается если не сказано иного. Возьмем другой вариант команды ps , с другими ключами.
- ps -eo user,pid,pcpu,nice,comm
- -e — ключ показывать все
- -o — output т.е какая информация нужна, далее в команде перечисляется необходимая информация (колонки)
После ввода данной команды, мы видим, что столбцов стало меньше. Только то, что мы запрашивали, пользователь, ID процесса, загрузка CPU, приоритет и какая команда.
Для того, чтобы понять, что такое приоритет, попробуем использовать команду sleep, которая позволяет, остановить операционную систему на указанное число секунд.
И выведем команду ps -eo user,pid,pcpu,nice,comm | grep sleep , используя pipline сортируем по названию процесса sleep. Вот, что у нас вышло.
Видим наш запущенный процесс.
Далее запустим какую-нибудь задачу с максимальным приоритетом. Это полезно если мы хотим запустить, какой ни будь серьезный процесс, чтобы он получил максимальный приоритет. Как пример, срочная переиндексация базы данных на сервере с максимальным приоритетом или программку, которая будет собирать информацию о системе с минимальным приоритетом.
И мы можем увидеть, что появился наш процесс со значение 10 по умолчанию.
Десять — это приоритет по умолчанию, и он ниже, чем ноль. Чем выше значение, тем приоритет ниже. Т.е. получается если мы запускаем с командой niсе, то процесс запускает с приоритетом ниже в 2 раза, чем просто если бы запустили.
Мы можем принудительно завершить процессы. killall sleep .
Попробуем запустить задачу с минимальным приоритетом. Для этого воспользуемся параметром. Команда будет выглядеть следующим образом.
Как мы видим все получилось. Процесс запущен с минимальным приоритетом.
Аналогично запускается процесс с максимальным приоритетом.
Тут нужно пояснить, что задачи с наивысшим приоритетом, могут пользователи только с правами root. Если мы бы попытались сделать из-под обычного пользователя, то ничего у нас бы не вышло.
killall sleep , еще раз завершим принудительно процессы. Запустим еще раз процесс с наименьшим приоритетом. nice -n 19 sleep 60000 . Теперь изменим приоритет текущего процесса. Для этого есть следующая команда:
renice 5 -p 416802 - т.е 5 - новый приоритет , 416802 - id процесса.
Как мы видим все успешно поменялось. Вот таким образом мы можем динамически менять приоритеты. В Операционной системе Windows мы так же можем менять приоритеты в менеджере задач, но если там пять уровней, то в Linux их получается 40.
Мы можем так же менять приоритеты определенному пользователю.
renice приоритет -u пользователь
Данные команды, нам позволяют гибко управлять распределением ресурсов на нашем сервере.