Поиск по сайту:

Как установить приоритет процесса Linux с помощью команд nice и renice


В этой статье мы кратко объясним планировщик ядра (также известный как планировщик процессов) и приоритет процесса, которые выходят за рамки рамки данного руководства. Затем мы немного углубимся в управление процессами Linux: посмотрим, как запустить программу или команду с измененным приоритетом, а также изменить приоритет запуска процессов Linux.

Читайте также: Как отслеживать процессы Linux и устанавливать ограничения процессов для каждого пользователя

Понимание планировщика ядра Linux

Планировщик ядра — это модуль ядра, который определяет наиболее подходящий процесс из всех запущенных процессов для выполнения следующим; он распределяет процессорное время между запущенными процессами в системе. Запускаемый процесс — это процесс, который ожидает только процессорного времени и готов к выполнению.

Планировщик формирует ядро многозадачности в Linux, используя алгоритм планирования на основе приоритетов для выбора между запущенными процессами в системе. Он ранжирует процессы на основе наиболее достойных, а также потребности в процессорном времени.

Понимание приоритета процесса и значения Nice

Ядро хранит большой объем информации о процессах, включая приоритет процесса, который представляет собой просто приоритет планирования, присвоенный процессу. Процессы с более высоким приоритетом будут выполняться раньше процессов с более низким приоритетом, а процессы с тем же приоритетом планируются один за другим, неоднократно.

Всего в Linux реализовано 140 приоритетов и два различных диапазона приоритетов. Первый — это значение приятности (приятность), которое варьируется от -20 (значение наивысшего приоритета) до 19 (значение самого низкого приоритета) и по умолчанию — 0, это мы рассмотрим в этом руководстве. Второй — приоритет в реальном времени, который по умолчанию варьируется от 1 до 99, а затем от 100 до 139. предназначены для пользовательского пространства.

Одной из важных характеристик Linux является динамическое планирование на основе приоритетов, которое позволяет изменять (увеличивать или уменьшать) значение процессов в зависимости от ваших потребностей, как мы увидим позже.

Как проверить ценность процессов Linux

Чтобы увидеть хорошие значения процессов, мы можем использовать такие утилиты, как ps, top или htop.

Чтобы просмотреть значение приятности процессов, используйте команду ps в пользовательском формате (здесь столбец NI показывает приятность процессов).

ps -eo pid,ppid,ni,comm

Альтернативно вы можете использовать утилиты top или htop для просмотра подходящих значений процессов Linux, как показано.

top
htop

Разница между 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

Диапазон значений Nice (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.
  • Команда или программа, запущенная без правильных настроек по умолчанию, имеет нулевой приоритет.
  • Только 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.

Синтаксис определения ограничения для пользователя следующий (возможные значения различных столбцов объяснены в файле):

#<domain>   <type>  <item>  <value>

Теперь используйте приведенный ниже синтаксис, где «жесткий» означает соблюдение жестких ссылок, а «мягкий» означает соблюдение мягких ограничений.

<username>  <hard|soft>  priority  <nice value>

Альтернативно, создайте файл в /etc/security/limits.d/, который переопределяет настройки в основном файле выше, и эти файлы читаются в алфавитном порядке.

Начните с создания файла /etc/security/limits.d/tecmint-priority.conf для пользователя tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

Затем добавьте в него эту конфигурацию:

tecmint  hard  priority  10

Сохраните и закройте файл. С этого момента любой процесс, принадлежащий tecmint, будет иметь хорошее значение 10 и PR 30.

Для получения дополнительной информации прочтите справочные страницы nice и renice:

man nice
man renice 

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

  1. Как найти и завершить запущенные процессы в Linux
  2. Руководство по командам Kill, Pkill и Killall для завершения процесса в Linux
  3. Как отслеживать использование системы, сбои в работе и устранять неполадки серверов Linux
  4. CPUTool — Ограничивайте и контролируйте загрузку ЦП любым процессом в Linux

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