- Команда nice, или вежливые процессы
- Как установить приоритет процесса Linux с помощью команд nice и renice
- Понимание планировщика ядра Linux
- Понимание приоритета процесса и ценности Nice
- Как проверить хорошую ценность процессов Linux
- Разница между PR или PRI и NI
- Как запустить команду с заданным значением Nice в Linux
- Изменить приоритет планирования процесса в Linux
- Как установить значение Nice по умолчанию для процессов конкретного пользователя
- Как задать или изменить приоритет процесса в Linux?
- Что такое приоритет процесса?
- Как узнать приоритет процесса?
- С помощью команды top (все запущенные процессы)
- С помощью команды ps (конкретный процесс(ы) по его имени)
- С помощью команды ps (конкретный процесс по его PID)
- Задание приоритета при запуске процесса
- Изменение приоритета у существующего процесса
Команда nice, или вежливые процессы
Когда на компьютере достаточно процессорного времени на исполнение всех процессов, нет необходимости в выставлении приоритетов. Но когда необходимо параллельно запустить несколько процессов, каждый из которых использует всё доступное процессорное время, может очень пригодиться утилита nice.
Команда nice запускает программу с изменённым приоритетом для планироващика задач. Слово «nice» в английском языке обозначает, в частности, «вежливый». По этимологии этой команды процесс с большим значением nice — более вежлив к другим процессам, позволяя им использовать больше процессорного времени, поскольку он сам имеет меньший приоритет (и, следовательно, большее «значение вежливости» — niceness value).
Наибольший приоритет (и наименьшее значение nice) — −20. 19, либо 20 — наименьший приоритет, но это, с другой стороны, самые вежливые процессы.
Чтобы посмотреть идентификатор и значение nice нужного процесса в системе, можно воспользоваться командой ps axl.
Пример использования команды nice — запуск ресурсоёмкой задачи в фоновом режиме, так, чтобы она выполнялась, но освобождала часть процессорного времени для других процессов, как только оно становятся им нужно. Таким образом можно, скажем, запустить кодирование OGG/MP3 с большим значением nice, чтобы оно происходило в фоновом режиме, используя не всё процессорное время, а то, что не используется другими процессами (с меньшим значением nice — то есть с большим приоритетом).
Чтобы запустить команду с определённым приоритетом, слева нужно добавить «nice -n значение_nice», либо «nice —adjustment значение_nice» (adjustment — настройка, регулировка).
То есть: nice -n значение_nice команда.
Если нужно изменить приоритет уже запущенного процесса, можно воспользоваться командой renice.
renice -n значение_nice id_процесса
Команда renice выводит старый и новый приоритет процесса.
Теперь, зная эти команды, можно управлять процессами так, чтобы определённые задачи выполнялись быстрее в случае, когда сразу много процессов используют всё доступное процессорное время.
Как установить приоритет процесса 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 значение приоритета процесса варьируется в диапазоне значений от -20 до 19 (т.е. получается 40 возможных значений: -20, -19, -18 . 0, 1, 2 . 19) и называется niceness (сокращенно NI). Чем меньше это значение, тем выше приоритет будет у такого процесса. Например, если у нас есть один процесс, работающий с приоритетом 10, а другой процесс работающий с приоритетом 15, то в первую очередь будет выполняться процесс приоритетом 10, а уже после него, тот, где приоритет 15. А в ситуации, когда есть 2 процесса и у одного из них приоритет будет равен -20, а у другого равен 10, то в первую очередь процессор будет обрабатывать тот процесс, у которого приоритет равен -20, а уже после тот, у которого приоритет равен 10.
Как узнать приоритет процесса?
С помощью команды top (все запущенные процессы)
Посмотреть приоритет процесса можно с помощью команды top
С помощью команды ps (конкретный процесс(ы) по его имени)
ps -o pid,comm,nice -C mysqld PID COMMAND NI 706 mysqld 0
С помощью команды ps (конкретный процесс по его PID)
ps -o pid,comm,nice 706 PID COMMAND NI 706 mysqld 0
Задание приоритета при запуске процесса
Для того, чтобы задать приоритет при старте нового процесса, необходимо воспользоваться командой nice
nice -n [значение приоритета] [команда]
Запустить утилиту top с приоритетом 15:
Изменение приоритета у существующего процесса
Для того, чтобы изменить приоритет у существующего процесса (т.е. такого процесса, который ранее был уже запущен), необходимо воспользоваться командой renice
renice [значение приоритета] -p [id процесса]
При понижении приоритета у процесса, который является вашим (т.е. запущен под той же учетной записью, под которой вы работаете в системе) — права суперпользователя не требуются, НО при повышении приоритета у процесса, требуется запускать команду renice с правами суперпользователя, т.е. с помощью sudo renice.
В противном случае, вы будете получать ошибку примерно такого содержания:
sudo renice 0 -p 15483 15483 (process ID) old priority 15, new priority 0
Мы изменили приоритет у существующего процесса (команда top из предыдущего примера) с 15 на 0.