Команда nice в Linux: задание приоритета, изменение через renice и замер доли CPU при конкуренции

Тестовая средаСемейство RHELAlmaLinux 9.8root · обычная учётная записьПроверено 2026-10-17

Команда nice в Linux задаёт значение nice (от -20 до 19), которое определяет, сколько процессорного времени программа уступает другим задачам при работе. На сервере с AlmaLinux 9 две задачи привязали к одному ядру CPU и провели замеры с разными значениями nice: доля CPU делилась только при конкуренции за процессор, а задача с nice 19 получила всего 1,4%.

Значение у уже запущенных процессов меняет renice, а уступать на стороне диска позволяет ionice. Для всех трёх команд приведён вывод в том виде, в каком он появился при запуске от root и от обычной учётной записи.

1️⃣ Команда nice в Linux: диапазон значений и доля CPU при конкуренции

Значение nice — это число, которое задаёт, насколько процесс уступает при распределении процессорного времени; его можно задать от -20 до 19. Обычно программы запускаются с 0; -20 обслуживается первым, а 19 уступает больше всех.

Легко решить, что чем больше число, тем раньше обслуживается процесс, но со значением nice всё наоборот. Планировщик Linux назначает каждому значению nice вес и делит процессорное время в этой пропорции: у nice 0 вес 1024, у 10 — 110, у 19 — 15.

Уступка происходит только при конкуренции за CPU. Если есть свободный процессор, задача даже с nice 19 запускается без ожидания. Это как места для пассажиров с детьми в автобусе: пока они свободны, сесть может любой, а уступают их только в давке.

🧭 Значения nice при свободном и занятом CPU
Поясняющая схема
🖥️ CPU
⚖️ Задача B
🖥️ Есть свободный CPU, поэтому каждой задаче достаётся своё ядро🖥️ Две задачи делят одно ядро CPU
Задача Anice 0 · вес 1024
100%50.0%90.3%98.6%
Задача Bnice 0 · вес 1024nice 10 · вес 110nice 19 · вес 15
100%50.0%9.7%1.4%
Когда CPU свободен, уступать некому, поэтому задача B использует процессор полностью при любом значении nice.
При конкуренции за одно ядро две задачи nice 0 с одинаковым весом делят процессорное время пополам.
Вес nice 10 — 110, примерно одна девятая от nice 0 (1024), поэтому процессорное время делится примерно как 90,3 : 9,7.
Вес nice 19 — 15, и при конкуренции задача B получает всего около 1,4% процессорного времени.

Таблица весов — это массив [sched_prio_to_weight] в исходном коде ядра Linux [kernel/sched/core.c]; она устроена так, что при росте значения nice на 1 процессорное время сокращается примерно на 10%.

2️⃣ Основы nice: +10 без числа и значения вне диапазона

Если после nice указать команду, она запускается с изменённым значением nice, а если ввести nice без команды, выводится значение nice текущей оболочки.

nice
0

В примерах ниже запущенный bash выводит собственное значение nice через [ps -o ni=]. Без -n к текущему значению прибавляется 10, а -n 5 прибавляет 5.

nice bash -c 'ps -o ni= -p $$'
 10
nice -n 5 bash -c 'ps -o ni= -p $$'
  5

Значения вне диапазона без ошибки приводятся к граничному, поэтому -n 50 запускается с 19.

nice -n 50 bash -c 'ps -o ni= -p $$'
 19

Продвигать вперёд отрицательным значением может только root. Обычная учётная запись получает предупреждение [cannot set niceness], а команда всё равно выполняется с nice 0.

# обычная учётная запись
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# учётная запись root
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

Дочерние процессы, которые запускает команда, выполненная через nice, тоже работают с тем же значением nice.

nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!'
  7

Поэтому, если запустить скрипт через nice, уступать будут все команды внутри него.

3️⃣ renice: изменение значения nice у запущенного процесса

nice задаёт значение только при запуске, поэтому у уже работающего процесса его меняют через renice. Сначала посмотрите PID и текущее значение в столбце NI в top или через ps.

ps -o pid,ni,cmd -p 201643
    PID  NI CMD
 201643   5 sleep 600
renice -n 10 -p 201643
201643 (process ID) old priority 5, new priority 10

Как видно по выводу, renice -n не прибавляет к текущему значению, а выставляет указанное: получается 10, а не 15 (5 плюс 10). Это не нажатие кнопки ▲ на пульте кондиционера, чтобы поднять на одно деление, а установка нужной температуры — 24 градуса.

Официальная документация util-linux тоже описывает -n как абсолютное значение, а прибавление в новых версиях выполняет параметр [--relative]. В проверенной util-linux 2.37.4 этого параметра ещё не было.

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

# обычная учётная запись
renice -n 10 -p 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): Permission denied

root может и понижать: в том же тесте значение 10 сразу сменилось на 3.

🔲 Симулятор nice · renice

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

Симулятор команды nicenice 8.32 · renice 2.37.4
[root@server work]#
Работает только в браузере и не затрагивает реальные процессы. Это виртуальный сервер со входом под обычной учётной записью: можно запустить команду с изменённым значением nice или изменить значение backup.sh (PID 2481) через renice, а затем проверить его командой ps -o pid,ni,cmd. Клавиши ↑↓ возвращают ранее введённые команды.

4️⃣ Замер доли CPU при конкуренции: nice 0 vs 0·10·19

Повышение значения nice не всегда замедляет задачу. Её доля уменьшается, только когда она конкурирует с другой задачей за тот же CPU.

Две задачи привязали к одному ядру CPU (taskset) и одновременно запустили приведённый ниже скрипт, который 5 секунд считает по одному числу. Чем больше насчитано, тем больше процессорного времени получила задача.

#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n

Скрипт увеличивает n на 1, пока не пройдёт 5 секунд, а затем выводит последнее значение.

📊5 секунд конкуренции за одно ядро CPUСколько насчитано за 5 секунд
Первая задача nice 0Вторая задача
nice 0 vs nice 0
Две задачи с одинаковым весом.
0250 тыс.500 тыс.750 тыс.1 млн
nice 0497 596 раз48.8%
nice 0522 040 раз51.2%
nice 0 vs nice 10
Только вторая задача запущена с nice 10.
0250 тыс.500 тыс.750 тыс.1 млн
nice 0979 971 раз90.1%
nice 10107 671 раз9.9%
nice 0 vs nice 19
Только вторая задача запущена с nice 19.
0250 тыс.500 тыс.750 тыс.1 млн
nice 0909 895 раз98.6%
nice 1913 010 раз1.4%
Данные получены 17 октября 2026 года на сервере с AlmaLinux 9: две задачи привязали к одному ядру CPU и одновременно запускали на 5 секунд.

Две задачи nice 0 поделили время пополам, nice 10 получила около 10%, а nice 19 — всего 1,4%. Это совпадает с пропорциями, рассчитанными по весам ядра (1024 : 110 даёт 90,3 : 9,7, а 1024 : 15 — 98,6 : 1,4).

Когда на том же ядре работала только задача nice 19, за 5 секунд она насчитала примерно от 650 000 до 1 140 000 раз. Если уступать некому, даже nice 19 использует CPU полностью; нагрузка на сервер (load average) во время теста составляла 3–5.

5️⃣ ionice: уступка на стороне диска и проверка планировщика

nice определяет только долю CPU, поэтому для задач, которые долго читают и пишут на диск, например резервного копирования, порядок доступа к диску уступают через ionice. При запуске с -c3 (idle) задача обслуживается только тогда, когда диск не использует ни одна другая программа.

ionice -c3 bash -c 'ionice -p $$'
idle
ionice -p $$
none: prio 0

Процесс, для которого ничего не задано, отображается как [none]; согласно документации ядра, он обслуживается в классе best-effort, а приоритет рассчитывается из значения nice для CPU.

Классы ionice действуют только при поддержке со стороны дискового планировщика; в документации ядра поддерживающими названы bfq и mq-deadline. В квадратных скобках показан планировщик, который используется сейчас.

cat /sys/block/nvme0n1/queue/scheduler
[none] mq-deadline kyber bfq

На тестовом сервере NVMe-диск работает с [none], поэтому, согласно официальной документации, ionice там может не действовать; отдельно эффект не измерялся. Имя диска можно узнать командой lsblk.

6️⃣ Где использовать nice: резервные копии · cron · wp-cli

nice стоит добавлять к долгим, но не срочным задачам. Сжатие резервной копии нагружает и CPU, и диск, поэтому nice и ionice задают вместе.

nice -n 19 ionice -c3 tar czf backup.tgz /home/example

Если уже работающая задача замедляет сервер, найдите её PID в top и повысьте значение через renice; для ежедневных заданий cron добавьте nice перед командой.

0 3 * * * nice -n 10 /usr/local/bin/backup.sh

Если на сервере WordPress запускать крупные задачи wp-cli, например поиск с заменой или повторное создание изображений, с nice -n 10, то при загруженном CPU первым процессор получает php-fpm, который обрабатывает запросы посетителей.

nice -n 10 wp media regenerate --yes

И наоборот, не повышайте значение nice у php-fpm и самого веб-сервера. Если уступают процессы, отвечающие посетителям, при загруженном CPU страницы отвечают медленнее.

🔢 FAQ & рекомендуемые материалы

У обычных процессов PR в top показывается как 20 плюс значение nice. Процесс, запущенный с nice 5, показал PR 25 и NI 5, а в столбце PRI команды ps, где расчёт другой, тот же процесс отображался как 14.

nice прибавляет указанное значение к текущему значению nice. [nice -n 5 nice -n 3 nice] выводит 8 — это другой принцип, чем у renice -n, который выставляет указанное значение.

Если в разделе [Service] файла юнита службы указать [Nice=], задаётся значение nice для процессов, которые запускает эта служба. Согласно официальной документации systemd.exec, его можно задать от -20 до 19.

🧭 Рекомендуемые материалы о процессах и планировании задач 11 статей · 4 источника
🗂️ Процессы и планирование задач
📄 Команда ps 📄 Команда top 📄 Команда nice в Linux 📄 Команда kill 📄 Команда killall 📄 Фоновый&приоритетный режим 📄 Команда uptime
📄 Настройка crontab
📋 WP CLI: установка и настройка 📄 WP-Cron(wp-cron.php) 📄 Поиск синхронизированных паттернов: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities (документация ядра) 📡 sched_prio_to_weight (исходный код ядра)
Проверка процессов командой ps
Linux · Процессы
Команда ps (команда для процессов)
Команда ps выводит процессы, которые выполняются сейчас.
Читать →Текущая статья
Команда TOP в Linux: интерфейс командной строки (CLI-Command-Line Interface)
Linux · Процессы
Команда top в Linux (проверка загрузки CPU и памяти)
Команда top в Linux показывает состояние работающей ОС, а её название означает table of processes.
Читать →Текущая статья
Команда nice в Linux: замер за 5 секунд, когда nice 0 и nice 0·10·19 делят одно ядро CPU
Linux · Процессы
Команда nice в Linux: задание приоритета, изменение через renice и замер доли CPU при конкуренции
Команда nice в Linux задаёт значение nice (от -20 до 19), которое определяет, сколько CPU программа уступает другим при запуске.
Читать →Текущая статья
Интерфейс командной строки Linux (Linux command line interface, CLI)
Linux · Процессы
Команда kill в Linux [kill -9 PID]
Команда kill в Linux завершает работающий процесс.
Читать →Текущая статья
Проверка версии команды killall в Linux
Linux · Процессы
Команда killall в Linux: установка, использование и параметры
Команда killall в Linux завершает выбранные процессы разом.
Читать →Текущая статья
Изображение Linux
Linux · Процессы
Фоновый (Back Ground)&приоритетный (Fore Ground) режим в Linux: управление процессами
Процессы в Linux работают в двух режимах: фоновом (Back Ground) и приоритетном (Fore Ground).
Читать →Текущая статья
Основы Linux (The Linux Foundation)
Linux · Нагрузка на сервер
Команда uptime в Linux (проверка времени работы сервера&средней нагрузки за 1, 5, 15 минут)
Команда uptime в Linux показывает среднюю нагрузку на систему и время работы сервера.
Читать →Текущая статья

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 4   +   7   =