Linux поднять приоритет процесса

Изучаем команды Linux: nice и renice

1. Введение

Возможность для пользователя задавать значение приоритета его собственных процессов определяет ваше отношение к другим пользователям системы. Даете ли вы им возможность использовать поцессор или просто злоупотребляете системными ресурсами без достаточных оснований? В этой статье вы узнаете, как управлять процессами в плане потребления ими ресурсов процессора и изменения приоритета ваших процессов, используя команды nice и renice. Мы начнем с азов теории, поговорим о том, что такое процесс, планирование, как создать дочерний процесс. Затем мы перейдем к команде nice и узнаем, как изменить значение приоритета процесса.

2. Что такое процесс

Простыми словами процесс — это соглашение об именовании, используемое в Linux для обозначения роли запущенной программы. Процесс — это набор правил, которым руководствуется данная программа при использовании выделенного процессорного времени, памяти и ресурсов ввода/вывода. Каждый процесс, запущенный в системе Linux, имеет свой ID (PID), по которому его можно отслеживать.

Ядро Linux позволяет собирать различную информацию о каждом процессе, которая включает, но не ограничивается:

— статус процесса ( работает, спит, зомби или остановлен)
— приоритет выполнения процесса
— информация об используемых ресурсах
— владелец процесса
— сетевые порты и файлы, открытые процессом
— и так далее.

Итак, теперь мы кое-что знаем процессах и можем продвинуться дальше и создать какой-нибудь процесс. Чтобы сделать это, просто откройте терминал и выполните команду yes в фоне, перенаправив ее вывод в /dev/null:

После это воспользуемся командой ps -l, чтобы извлечь информацию о нашем процессе:

Из этой таблицы мы можем узнать немало интересного:

F — FLAG: процесс запущен без привилегий суперпользователя. В противном случае мы могли бы увидеть число 4 или сумму 1 и 4. Подробности можно узнать, посмотрев man-страницу ps.
S — STATE: процесс в настоящее время работает.
UID — ID пользователя, инициализировавшего процесс. UID на самом деле является алиасом EUID (Effective User ID)
PID — ID процесса нашей команды yes 5997.
PPID — Parent Process ID. Это ID родительского для нашей команды yes процесса. В нашем случае это bash с PID 5830.
C — загрузка процессора, целое число, выражается в %.
PRI — Приоритет процесса. Большее значение означает меньший приоритет.
NI — Значение Nice, которое находится в диапазоне от -20 до 19. Большее значение означает меньший приоритет.

2.1. Планирование процессов

Если вы не хотите слишком глубоко вникать в детали планирования и приоритета процессов, то можете пропустить этот раздел. Здесь мы сосредоточимся на описании процессов в Linux и попытаемся обобщить некоторые моменты, так как подробное описание их может занять множество страниц.
С нашей точки зрения необходимо понимать, что принцип работы планировщика Linux (для ядра версии >= 2.6) вытесняющий. Под этим понимается способность ядра выбирать среди всех заданий то, которое имеет наивысший приоритет. Далее, ядро делит списки приоритета на задачи реального времени и пользовательские задания, ранжирующиеся от 1 — 100 и 101 — 140 соответственно.
Далее, ядро Linux выделяет задачам с более высоким приоритетом больший квант времени, а задачам с меньшим приоритетам — меньший квант времени, который в среднем составляет 200 и 10 мс соответственно. Другими словами, каждое задание допускается к выполнению только, если у него остается какая-либо часть времени. Поэтому меньший отрезок времени для выполнения означает, что процесс получает меньше времени в очереди выполнения и, соответственно, получает меньше ресурсов. Когда отрезок времени процесса заканчивается, он помещается в очередь выполнения с истекшим временем, затем его приоритет пересчитывается, и он снова помещается в активную очередь выполнения. Эта зависимость иллюстрируется приведенной здесь диаграммой. Важно помнить, что обе очереди выполнения содержат списки задач, отсортированных по их приоритету.

Читайте также:  Смена цвета фона windows

2.2. Жизненный цикл процесса

Основной принцип управления процессами в Linux включает две важные операции, создающие новый процесс. Операция, при которой процесс копирует себя, и тем самым создает новый процесс с уникальным ID, осуществляется при помощи вызова fork(). За ней часто следует операция exec(), запускающая новую программу. Первый процесс, создающийся при загрузке системы, называется init, он всегда получает PID 1. Все остальные процессы считаются дочерними по отношению к процессу init. В нормальных условиях перед завершением дочернего процесса требуется, чтобы родительский процесс послал ему значение exit. При успешном завершении процесса он отправляет родительскому процессу значение 0. Если по каким-либо причинам дочерний процесс пережил родительский, init отмечает его как не имеющий родителей.

3. Использование команды nice

Так как мощь процессоров на протяжении многих лет возрастает в геометрической прогрессии, соответственно уменьшается важность команды nice. В результате сегодня редко приходится вручную изменять приоритет процессов. Тем не менее, такая возможность имеется и она может быть полезной в некоторых ситуациях. По умолчанию nice устанавливает значение приоритета 10.

Чтобы запустить процесс со значением nice, отличным от 10, можно использовать ключ -n.

Чтобы установить значение nice ниже нуля, требуются права суперпользователя. В противном случае будет установлено значение 0. Ниже мы пробуем задать значение nice -1 без прав root:

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

4. Использование команды renice

В предыдущем разделе мы узнали, как запускать программу с заданным значением nice. Теперь мы попробуем изменить значение nice у запущенной программы с помощью команды renice. Итак, у нас есть работающая программа yes со значением nice 10:

Чтобы изменить его значение, мы можем использовать команду renice со значением nice и PID процесса. Давайте изменим значение nice на 15:

Согласно правилам, обычный пользователь может только увеличивать значение nice (уменьшать приоритет) любого процесса. Если попробовать изменить значение nice с 15 до 10, мы получим следующее сообщение об ошибке:

Также, команда renice позволяет суперпользователю изменять значение nice процессов любого пользователя. Это делается с помощью ключа -u. Следующая команда изменяет значение приоритета всех процессов пользователя на -19:

5. Заключение

Команда nice может быть удобным инструментом и она очень проста в использовании. Пожалуйста, отметьте, что для изменения значения приоритета также может использоваться команда top.

Источник

Администрирование систем Linux. Приоритеты процессов

Глава 2. Приоритеты процессов

2.1. Приоритеты процессов и значения nice

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

2.1.2. Именованные программные каналы (утилита mkfifo)

Процессы могут обмениваться информацией друг с другом посредством именованных программных каналов . Эти именованные программные каналы могут создаваться с помощью утилиты mkfifo .

В примере ниже показана процедура создания четырех отдельных именованных программных каналов (в новой директории).

2.1.3. Увлекательные манипуляции с утилитой cat

Для демонстрации методики использования утилит top и renice мы будем применять комбинацию из утилиты cat и созданных ранее именованных программных каналов с целью полного исчерпания вычислительных ресурсов центрального процессора .

Бинарный файл cat должен быть скопирован в текущую директорию с отличным именем. (Это позволит нам достаточно просто отслеживать созданные процессы с помощью утилиты top . Вы можете выполнить эти же действия и без копирования бинарного файла cat, но с использованием различных учетных записей пользователей. Или же вы можете просто отслеживать значения идентификаторов каждого из созданных процессов .)

Читайте также:  Microsoft windows fix center

Команды, которые вы можете обнаружить в примере выше, предназначены для создания двух процессов с именами proj33 , которые на самом деле будут являться экземплярами утилиты cat , выполняющими циклическую передачу символа x с помощью именованных программных каналов pipe33a и pipe33b . Те же самые манипуляции осуществляются процессом с именем proj42 с символом z.

2.1.4. Утилита top

Простой запуск утилиты top без передачи каких-либо параметров или аргументов приведет к выводу информации о параметрах системы и обо всех процессах в системе. При этом в верхней части вывода утилиты top может быть обнаружена следующая информация.

Обратите внимание на нулевое значение времени простоя центрального процессора ( cpu idle time 0.0 id ). Оно объясняется тем, что наши процессы cat используют все вычислительные ресурсы центрального процессора . Результаты могут отличаться при использовании систем с четырьмя или большим количеством ядер центрального процессора .

2.1.5. Команда top -p

Команда top -p 1670,1671,1673,1674 из примера ниже позволяет выводить информацию о четырех процессах, каждый из которых использует примерно 25 процентов вычислительных ресурсов центрального процессора.

Все четыре процесса имеют одинаковый приоритет (столбец PR) и на равных соревнуются за время центрального процессора . В некоторых системах ядро Linux может использовать немного отличающиеся значения приоритетов процессов , но в любом случае в результате описанных выше манипуляций четыре процесса будут на равных соревноваться за время центрального процессора .

2.1.6. Утилита renice

Так как упомянутые ранее процессы уже исполняются, нам придется использовать утилиту renice для изменения их значений nice (столбец NI).

В примере ниже показана методика использования утилиты renice по отношению к обоим процессам с именами proj33 .

Обычные пользователи могут устанавливать значения nice для своих процессов из диапазона от 0 до 20. Отрицательные значения nice может устанавливать исключительно пользователь root . Будьте осторожны при использовании отрицательных значений nice, так как в случае их установки управление системой с помощью клавиатуры или удаленной командной оболочки, работающей по протоколу ssh, может быть значительно осложнено или же вообще окажется невозможным.

2.1.7. Влияние значений nice на работу процессов

Влияние значения nice на работу процесса может может варьироваться. В примере ниже показан результат исполнения нашей команды renice +8 . Обратите внимание на значения доли процессорного времени из столбца %CPU для каждого из процессов.

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

2.1.8. Утилита nice

Утилита nice функционирует аналогично утилите renice , но применяется в момент запуска приложения.

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

2.2. Практическое задание: приоритеты процессов

1. Создайте новую директорию и шесть именованных программных каналов в ней.

2. Инициируйте циклическую передачу символа посредством двух именованных программных каналов .

3. Используйте утилиты top и ps для вывода информации (pid, ppid, приоритет, значение nice, . ) о двух созданных процессах cat.

4. Инициируйте циклическую передачу другого символа посредством двух других именованных программных каналов, но в этот раз используйте утилиту nice для запуска приложений. Проверьте, соревнуются ли созданные процессы за все вычислительные ресурсы центрального процессора. (Не забывайте о том, что в случае необходимости вы можете создать еще два или большее количество процессов cat , использующих оставшиеся программные каналы).

5. Используйте утилиту ps для установления факта использования двумя новыми процессами cat измененных значений nice . Для этого используйте параметры -o и -C утилиты ps .

6. Используйте утилиту renice для увеличения значения nice процессов c 10 до 15. Обратите внимание на отличия в работе данных процессов и процессов со стандартными значениями nice.

Читайте также:  Install windows service description

2.3. Корректная процедура выполнения практического задания: приоритеты процессов

1. Создайте новую директорию и шесть именованных программных каналов в ней.

2. Инициируйте циклическую передачу символа посредством двух именованных программных каналов .

3. Используйте утилиты top и ps для вывода информации (pid, ppid, приоритет, значение nice, . ) о двух созданных процессах cat.

4. Инициируйте циклическую передачу другого символа посредством двух других именованных программных каналов, но в этот раз используйте утилиту nice для запуска приложений. Проверьте, соревнуются ли созданные процессы за все вычислительные ресурсы центрального процессора. (Не забывайте о том, что в случае необходимости вы можете создать еще два или большее количество процессов cat , использующих оставшиеся программные каналы).

5. Используйте утилиту ps для установления факта использования двумя новыми процессами cat измененных значений nice . Для этого используйте параметры -o и -C утилиты ps .

6. Используйте утилиту renice для увеличения значения nice процессов c 10 до 15. Обратите внимание на отличия в работе данных процессов и процессов со стандартными значениями nice.

Источник

Как задать или изменить приоритет процесса в 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 (конкретный процесс по его PID)

Задание приоритета при запуске процесса

Для того, чтобы задать приоритет при старте нового процесса, необходимо воспользоваться командой nice
nice -n [значение приоритета] [команда]
Запустить утилиту top с приоритетом 15:

Изменение приоритета у существующего процесса

Для того, чтобы изменить приоритет у существующего процесса (т.е. такого процесса, который ранее был уже запущен), необходимо воспользоваться командой renice
renice [значение приоритета] -p [id процесса]

renice: failed to set priority for 91197 (process ID): Permission denied

Мы изменили приоритет у существующего процесса (команда top из предыдущего примера) с 15 на 0.

Была ли эта статья Вам полезна?

Комментарии к статье (5)

    • марал
    • 20.11.2020 12:08

    а если отказано в доступе, как исправить приоритет проецесса?

    Вы работаете под суперпользователем root? Если нет, то используйте команду sudo или su.

    Добавил информацию в статью:

    При понижении приоритета у процесса, который является вашим (т.е. запущен под той же учетной записью, под которой вы работаете в системе) — права суперпользователя не требуются, НО при повышении приоритета у процесса, требуется запускать команду renice с правами суперпользователя, т.е. с помощью sudo renice.

    было бы еще неплохо добавить шпаргалку, как повесить приоритет по умолчанию для какой-нибудь программы, например на тот же mysql

    очень полезная статья, каждый раз узнаю здесь что-то новое

    Источник

Оцените статью