ionice & nice — Priority Control

If you like this project, consider supporting me on Buy Me a Coffee ☕️

ionice & nice — CPU & I/O Priority Control

nice and ionice are Linux utilities for controlling CPU and I/O scheduling priority of processes. They allow sysadmins to ensure critical services get resources first while background tasks (backups, indexing, log compression) run with minimal impact.

nice adjusts the CPU scheduling priority (niceness) of a process. Higher niceness values mean lower priority. The kernel's CFS (Completely Fair Scheduler) uses niceness to allocate CPU time proportionally.

ionice controls the I/O scheduling priority by assigning processes to I/O scheduler classes. This is especially important for disk-intensive tasks on spinning drives (HDD) and can also help on SSDs/NVMe with BFQ scheduler.

renice changes the niceness of an already-running process without restarting it.

Use cases / Варианты использования:


📚 Table of Contents / Содержание

  1. nice — CPU Priority
  2. renice — Change Priority
  3. ionice — I/O Priority
  4. Combined Usage
  5. Best Practices

nice — CPU Priority

Basic Usage / Базовое использование

nice starts a process with modified CPU priority (niceness). nice запускает процесс с изменённым приоритетом CPU (niceness).

nice <COMMAND>                            # Default +10 niceness / По умолчанию +10
nice -n 10 <COMMAND>                      # Run with niceness 10 / Запустить с niceness 10
nice -n 19 <COMMAND>                      # Lowest priority / Минимальный приоритет
sudo nice -n -20 <COMMAND>                # Highest priority (root) / Максимальный приоритет (root)

Niceness Values / Значения niceness

-20 = Highest priority / Максимальный приоритет (только root)
  0 = Default / По умолчанию
+19 = Lowest priority / Минимальный приоритет

Negative values = Higher priority / Отрицательные = выше приоритет
Positive values = Lower priority / Положительные = ниже приоритет

Examples / Примеры

nice -n 19 tar czf backup.tgz /data       # Low priority backup / Бэкап с низким приоритетом
nice -n 10 find / -type f > list.txt      # Background search / Фоновый поиск
sudo nice -n -5 nginx                     # Higher priority nginx / Nginx с высоким приоритетом

renice — Change Priority

By PID / По PID

renice -n 10 -p <PID>                     # Set niceness 10 / Установить niceness 10
sudo renice -n -5 -p <PID>                # Higher priority (root) / Повысить приоритет (root)
renice -n 19 -p <PID>                     # Lowest priority / Минимальный приоритет

By User / По пользователю

renice -n 10 -u <USER>                    # All user processes / Все процессы пользователя
sudo renice -n -5 -u root                 # All root processes / Все процессы root

By Process Group / По группе процессов

renice -n 10 -g <PGID>                    # All in group / Все в группе

Check Current Priority / Проверить текущий приоритет

ps -l -p <PID>                            # NI column shows niceness / Столбец NI показывает niceness
top                                       # NI column in top / Столбец NI в top

ionice — I/O Priority

Basic Usage / Базовое использование

ionice controls I/O (disk) scheduling priority. ionice управляет приоритетом ввода-вывода (диск).

ionice <COMMAND>                          # Show/set I/O priority / Показать/установить приоритет I/O
ionice -p <PID>                           # Show priority of PID / Показать приоритет PID
ionice -c <CLASS> -n <LEVEL> <COMMAND>    # Set class and level / Установить класс и уровень

I/O Classes (-c) / Классы I/O

Class Name Description (EN / RU)
1 realtime Highest, root only, can starve system / Максимальный, только root, может повесить систему
2 best-effort Default, adjustable via -n (0–7) / По умолчанию, настраивается через -n
3 idle Only when disk is idle / Только когда диск свободен

I/O Levels (-n) / Уровни I/O

0 = Highest priority (for class 2) / Максимальный приоритет (для класса 2)
7 = Lowest priority (for class 2) / Минимальный приоритет (для класса 2)

[!NOTE] I/O classes only work with CFQ and BFQ schedulers. Check with cat /sys/block/sda/queue/scheduler. Modern NVMe drives often use none (no I/O scheduler), making ionice ineffective. Классы I/O работают только с CFQ и BFQ. Проверьте: cat /sys/block/sda/queue/scheduler.

Examples / Примеры

ionice -c3 rsync -a /mnt/data /backup     # Idle class backup / Бэкап в классе idle
ionice -c2 -n7 find / -type f > list.txt  # Low priority search / Поиск с низким приоритетом
ionice -c2 -n0 dd if=/dev/zero of=/dev/sda  # High priority dd / dd с высоким приоритетом
ionice -p <PID>                            # Show priority of PID / Показать приоритет PID

For Running Processes / Для запущенных процессов

ionice -c3 -p <PID>                       # Set PID to idle class / Установить PID в класс idle
ionice -c2 -n7 -p <PID>                   # Set PID to low priority / Установить PID в низкий приоритет

Combined Usage

Low CPU + Low I/O / Низкий CPU + низкий I/O

ionice -c3 nice -n19 tar czf /backup.tgz /data
# Minimal CPU and disk impact / Минимальное влияние на CPU и диск

ionice -c3 nice -n19 rsync -a /source /dest
# Background rsync / Фоновый rsync

ionice -c2 -n7 nice -n10 find / -type f -mtime +30 > old_files.txt
# Low priority file search / Поиск файлов с низким приоритетом

High Priority (Admin) / Высокий приоритет (Админ)

sudo ionice -c1 -n0 nice -n-10 <CRITICAL_COMMAND>
# Maximum priority (use with caution) / Максимальный приоритет (осторожно!)

[!CAUTION] Realtime I/O class (-c1) can starve other processes of disk I/O, potentially causing system hangs. Use only when absolutely necessary. Класс realtime (-c1) может лишить другие процессы доступа к диску, вызвав зависание.

Verification / Проверка

# Check both CPU and I/O priority / Проверить приоритеты CPU и I/O
ps -o pid,ni,comm -p <PID>                # CPU niceness / CPU niceness
ionice -p <PID>                           # I/O priority / Приоритет I/O

Best Practices

Task nice ionice Priority Level
Backup jobs -n 19 -c3 Lowest / Минимальный
Log rotation -n 10 -c2 -n7 Low / Низкий
Normal tasks (default) (default) Standard / Стандартный
Database -n -5 -c2 -n0 Higher / Повышенный
Critical apps -n -10 -c1 Highest / Максимальный

Use Cases / Варианты использования

# Backup scripts / Скрипты бэкапа
ionice -c3 nice -n19 /usr/local/bin/backup.sh

# Cron jobs / Задачи cron
# Add to crontab: 0 3 * * * ionice -c3 nice -n19 /path/to/script.sh

# Database dumps / Дампы БД
ionice -c2 -n7 nice -n10 pg_dump mydb > backup.sql
ionice -c2 -n7 nice -n10 mysqldump --all-databases > backup.sql

Notes / Примечания


On this page

ionice &amp; nice — CPU &amp; I/O Priority Control 📚 Table of Contents / Содержание nice — CPU Priority Basic Usage / Базовое использование Niceness Values / Значения niceness Examples / Примеры renice — Change Priority By PID / По PID By User / По пользователю By Process Group / По группе процессов Check Current Priority / Проверить текущий приоритет ionice — I/O Priority Basic Usage / Базовое использование I/O Classes (-c) / Классы I/O I/O Levels (-n) / Уровни I/O Examples / Примеры For Running Processes / Для запущенных процессов Combined Usage Low CPU + Low I/O / Низкий CPU + низкий I/O High Priority (Admin) / Высокий приоритет (Админ) Verification / Проверка Best Practices Recommended Priorities / Рекомендуемые приоритеты Use Cases / Варианты использования Notes / Примечания Documentation Links