Что такое nice value (приоритет NI) в команде top в Linux?

«Что такое nice value (приоритет NI) в команде top в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Nice value (NI) — это числовое значение, определяющее приоритет планировщика задач (scheduler) для процесса в пользовательском пространстве. Диапазон: от -20 (наивысший приоритет) до 19 (наинизший приоритет). По умолчанию процесс наследует nice=0 от родителя.

Как это работает: Чем ниже значение NI, тем выше приоритет процесса на получение времени CPU. Процесс с NI -20 будет получать больше процессорного времени, чем процесс с NI 10, при высокой конкуренции за ресурсы.

Практическое использование:

  • Запуск процесса с низким приоритетом (чтобы не мешать критичным задачам):

    nice -n 15 ./long-running-script.sh
  • Изменение приоритета уже запущенного процесса:

    # Установить для процесса с PID 4242 nice value = 10
    renice -n 10 -p 4242
  • Просмотр приоритетов:

    top  # колонка NI
    ps -eo pid,ni,comm | head -20

Важные нюансы для DevOps:

  1. Права доступа: Только пользователь root может повышать приоритет (устанавливать отрицательные значения от -1 до -20). Любой пользователь может понизить приоритет своего процесса (установить значение от 1 до 19).
  2. Относительность: Nice value влияет на "долю" CPU, а не гарантирует строгий порядок выполнения. Реальный приоритет ядра (колонка PR в top) рассчитывается с учетом NI.
  3. Сценарии использования:
    • Запуск фоновых задач резервного копирования, сборки пакетов или аналитических скриптов с низким приоритетом (nice -n 19).
    • Обеспечение приоритета для критичных сервисов (например, веб-сервера или базы данных) через настройки systemd (Nice= в юните службы).