Что делать, если сервер Linux зависает: полное руководство по управлению приоритетами процессов с помощью команды nice

Обзор

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

1. Проверка приоритета процесса (NI/PR) и настройка среды мониторинга htop

Установите пакеты htop и procps — необходимые инструменты для практического мониторинга приоритетов процессов.

apt-get update -qq && apt-get install -y htop procps

Команда ps позволяет проверить подробную информацию и значения приоритетов процессов, запущенных в системе.
В выводе команды NI представляет собой значение nice, настраиваемое пользователем, а PRI — фактический приоритет, назначенный планировщиком ядра.
⚙️ [Основные опции]

-e : выбрать и отобразить все процессы, запущенные в системе.
-o : настроить пользовательский формат отображения колонок (pid, ni, pri, comm и т. д.).
-u : фильтровать и отображать процессы, принадлежащие определенному пользователю.
-p : просмотреть только процессы с указанным PID (идентификатором процесса).
-f : вывести список в полном формате, содержащий все подробные сведения о процессах.

ps -eo pid,ni,pri,comm | head -n 15

2. Запуск фоновой задачи с низким приоритетом с помощью команды nice

Создайте временный рабочий каталог и перейдите в него для безопасного создания и управления тестовыми файлами.

mkdir -p /tmp/nice_demo && cd /tmp/nice_demo

Запустите операцию создания большого файла в фоновом режиме (&), установив с помощью команды nice значение nice, равное 10. Это понизит приоритет процесса, уступая ресурсы CPU другим задачам.

nice -n 10 dd if=/dev/urandom of=/tmp/nice_demo/sample.dat bs=1M count=100 &

Используя комбинацию команд ps и grep, проверьте PID запущенного процесса dd и убедитесь, что фактическое значение nice (NI) установлено должным образом.

ps -eo pid,ni,comm | grep dd

3. Изменение приоритета уже запущенного процесса в реальном времени с помощью renice

Для практики изменения приоритета в реальном времени запустите в фоновом режиме (&) процесс sleep, который ожидает в течение 300 секунд.

sleep 300 &

Сохраните в переменную окружения TARGET_PID значение специальной переменной $!, которая содержит идентификатор (PID) последнего процесса, запущенного в фоновом режиме.

TARGET_PID=$!

Проверьте текущее значение nice (NI) целевого процесса с помощью команды ps. Можно заметить, что процесс выполняется со значением по умолчанию 0.

ps -p $TARGET_PID -o pid,ni,comm

С помощью команды renice измените значение nice уже работающего целевого процесса на 15, чтобы понизить его приоритет.
Вывод команды подтверждает, что прежний приоритет (old priority 0) был успешно изменен на новый (new priority 15).

renice 15 -p $TARGET_PID

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

ps -p $TARGET_PID -o pid,ni,comm

После завершения практической работы принудительно завершите тестовый процесс (kill -9), чтобы освободить системные ресурсы.

kill -9 $TARGET_PID

4. Назначение высокого приоритета (отрицательный nice) с правами root и меры предосторожности

Чтобы применить отрицательное значение nice (-5), которое не может быть установлено обычным пользователем, запустите процесс с повышенным приоритетом в фоновом режиме (&), используя права администратора через sudo.
Процесс с отрицательным значением nice получает более высокий приоритет при планировании CPU, что позволяет выделять ему ресурсы системы в приоритетном порядке.

sudo nice -n -5 bash -c ’echo “High priority process running” && sleep 5’ &

С помощью команды ps найдите работающие процессы и убедитесь, что значение nice (NI) целевого процесса (sleep) успешно установилось в -5.
В выводе команды видно, что в отличие от стандартных процессов со значением по умолчанию (0), для данного процесса установлено отрицательное значение nice (-5), и он выполняется с высоким приоритетом.

ps -eo pid,ni,comm | grep -E ‘sleep|bash’ | tail -n 5

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