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 мс соответственно. Другими словами, каждое задание допускается к выполнению только, если у него остается какая-либо часть времени. Поэтому меньший отрезок времени для выполнения означает, что процесс получает меньше времени в очереди выполнения и, соответственно, получает меньше ресурсов. Когда отрезок времени процесса заканчивается, он помещается в очередь выполнения с истекшим временем, затем его приоритет пересчитывается, и он снова помещается в активную очередь выполнения. Эта зависимость иллюстрируется приведенной здесь диаграммой. Важно помнить, что обе очереди выполнения содержат списки задач, отсортированных по их приоритету.

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

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

Читайте также:  Переключение между языками ввода windows

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.

Источник

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Приоритеты процессов Linux

4 минуты чтения

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

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

  • Научимся определять приоритеты процессов;
  • Рассмотрим, как запускать программы с повышенным приоритетом или с пониженным;
  • Посмотрим, как изменять приоритет запущенных программы.

В Linux любой процесс может иметь приоритет от -20 до +19. Во FreeBSD до +20. Максимальным приоритетом считается, тот процесс у которого минимальное число. Т.е. максимальный по приоритету процесс будет иметь число — 20, а минимальный -19 соответственно. Поэтому задача с приоритетом -20 будет выполняться в первую очередь с максимум ресурсов и наоборот задача с +19 будет выполняться в последнюю очередь и минимум ресурсов. Linux для установки приоритетов использует такую программу nice и renice.

Для того, чтобы рассмотреть данную тему воспользуемся командой ps aux . Запуская данную команду мы получаем все сведения о запущенных процессах на данном сервере. Так же мы можем увидеть от какого пользователя данный процесс запущен. Теперь мы используем другой набор ключей для команды ps .

Чтоб получить нам интересующий вывод данных используем команду ps alx .

Мы можем видеть, что получили немного другую информацию. Появилась колонка, промаркированная «NI» и колонка «PRI«. Мы можем видеть, что верхние процессы выполняются с nice 0, т.е. это авторитет по умолчанию, который присваивается если не сказано иного. Возьмем другой вариант команды ps , с другими ключами.

Читайте также:  Show shared files in windows

  • ps -eo user,pid,pcpu,nice,comm
  • -e — ключ показывать все
  • -o — output т.е какая информация нужна, далее в команде перечисляется необходимая информация (колонки)

После ввода данной команды, мы видим, что столбцов стало меньше. Только то, что мы запрашивали, пользователь, ID процесса, загрузка CPU, приоритет и какая команда.

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

И выведем команду ps -eo user,pid,pcpu,nice,comm | grep sleep , используя pipline сортируем по названию процесса sleep. Вот, что у нас вышло.

Видим наш запущенный процесс.

Далее запустим какую-нибудь задачу с максимальным приоритетом. Это полезно если мы хотим запустить, какой ни будь серьезный процесс, чтобы он получил максимальный приоритет. Как пример, срочная переиндексация базы данных на сервере с максимальным приоритетом или программку, которая будет собирать информацию о системе с минимальным приоритетом.

И мы можем увидеть, что появился наш процесс со значение 10 по умолчанию.

Десять — это приоритет по умолчанию, и он ниже, чем ноль. Чем выше значение, тем приоритет ниже. Т.е. получается если мы запускаем с командой niсе, то процесс запускает с приоритетом ниже в 2 раза, чем просто если бы запустили.

Мы можем принудительно завершить процессы. killall sleep .

Попробуем запустить задачу с минимальным приоритетом. Для этого воспользуемся параметром. Команда будет выглядеть следующим образом.

Как мы видим все получилось. Процесс запущен с минимальным приоритетом.

Аналогично запускается процесс с максимальным приоритетом.

Тут нужно пояснить, что задачи с наивысшим приоритетом, могут пользователи только с правами root. Если мы бы попытались сделать из-под обычного пользователя, то ничего у нас бы не вышло.

killall sleep , еще раз завершим принудительно процессы. Запустим еще раз процесс с наименьшим приоритетом. nice -n 19 sleep 60000 . Теперь изменим приоритет текущего процесса. Для этого есть следующая команда:

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

Мы можем так же менять приоритеты определенному пользователю.

Данные команды, нам позволяют гибко управлять распределением ресурсов на нашем сервере.

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

Источник

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

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

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

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

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

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

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

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

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

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

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

2.1.4. Утилита top

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

Читайте также:  Проблема временного профиля windows 10

Обратите внимание на нулевое значение времени простоя центрального процессора ( 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.

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.

Источник

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