- Изучаем команды Linux: nice и renice
- 1. Введение
- 2. Что такое процесс
- 2.1. Планирование процессов
- 2.2. Жизненный цикл процесса
- 3. Использование команды nice
- 4. Использование команды renice
- 5. Заключение
- Установка приоритетов для процессов в Linux
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Приоритеты процессов 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 отмечает его как не имеющий родителей.
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
Все процессы в системе трудятся с определёнными приоритетами, также называемыми «значениями nice», которые могут изменяться от -20 (верхний приоритет) до 19 (наименьший приоритет). Если оно не определено, каждый процесс будет запускаться с ценностью по умолчанию — 0 («базовым» приоритетом (понятие, показывающее важность, первенство) распределения машинного времени). Для процессов с более рослым приоритетом (меньшим значением nice, вплоть до -20) будет выделено больше целых ресурсов по сравнению с другими процессами с меньшим приоритетом (до 19), предоставляя им большее количество циклов процессора. Все пользователи, кроме рута, могут только понижать приоритет собственных собственных процессов в диапазоне от 0 до 19. Суперпользователь (root) для любого процесса может водворить любое значение приоритета.
Если один или несколько процессов используют очень много ресурсов системы, вы можете изменить их приоритеты вместо того, чтобы уничтожать их. Для этого используется команда renice. Ее синтаксис:
renice приоритет [[-p] pid . ] [[-g] pgrp . ] [[-u] user . ]
Где приоритет — значение приоритета, pid — идентификатор процесса (используйте опцию -p для указания нескольких действий), pgrp — идентификатор группы процесса (если их несколько, используйте -g) и user — имя пользователя, обладающего процессом (-u для нескольких пользователей). Давайте представим, что вы запустили процесс с PID 785, который исполняет длительные научные вычисления, а пока он работает, вы хотели бы немного расслабится и поиграть, для что вам нужно освободить немного системных ресурсов. Тогда вы можете набрать:
В данном случае выполнение вашего процесса потенциально может занять больше времени, хотя он не будет забирать процессорное время у других процессов. Если вы системный администратор и приметили, что какой-то пользователь запустил слишком много процессов, и они используют слишком много целых ресурсов, вы можете изменить приоритет процессов этого пользователя при помощи одной бригады:
# renice +20 -u peter
После все процессы пользователя peter получат наименьший ценность и не будут затруднять работу процессов других пользователей.
Теперь, когда вы видите о том, что можно изменять приоритеты процессов, вам может понадобиться запустить программу с определенным ценностью. Для этого используйте команду nice. В этом случае вам необходимо указать свою бригаду в качестве опции для nice. Опция -n используется для установки значения приоритета. По умолчанию nice ставит приоритет 10. Например, вам нужно создать ISO-образ установочного CD-ROM’а с Mandrakelinux:
$ dd if=/dev/cdrom of=
В отдельных системах со стандартным IDE CD-ROM процесс копирования больших объёмов информации может завладеть слишком много ресурсов системы. Чтобы предотвратить блокирование других процессов благодаря копирования, вы можете запустить процесс с пониженным приоритетом при помощи этой команды:
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Приоритеты процессов Linux
4 минуты чтения
Данная тема важна так как позволяет изменять приоритет процессов в операционной системе Linux. Иногда возникает такая ситуация, что необходимо изменить приоритет процессов, какой — то процесс сделать более приоритетным, отдав побольше ресурсов, а какой-то менее приоритетным забрав часть ресурсов сервера. В данной теме мы рассмотрим следующие вопросы:
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
- Научимся определять приоритеты процессов;
- Рассмотрим, как запускать программы с повышенным приоритетом или с пониженным;
- Посмотрим, как изменять приоритет запущенных программы.
В Linux любой процесс может иметь приоритет от -20 до +19. Во FreeBSD до +20. Максимальным приоритетом считается, тот процесс у которого минимальное число. Т.е. максимальный по приоритету процесс будет иметь число — 20, а минимальный -19 соответственно. Поэтому задача с приоритетом -20 будет выполняться в первую очередь с максимум ресурсов и наоборот задача с +19 будет выполняться в последнюю очередь и минимум ресурсов. Linux для установки приоритетов использует такую программу nice и renice.
Для того, чтобы рассмотреть данную тему воспользуемся командой ps aux . Запуская данную команду мы получаем все сведения о запущенных процессах на данном сервере. Так же мы можем увидеть от какого пользователя данный процесс запущен. Теперь мы используем другой набор ключей для команды ps .
Чтоб получить нам интересующий вывод данных используем команду ps alx .
Мы можем видеть, что получили немного другую информацию. Появилась колонка, промаркированная «NI» и колонка «PRI«. Мы можем видеть, что верхние процессы выполняются с nice 0, т.е. это авторитет по умолчанию, который присваивается если не сказано иного. Возьмем другой вариант команды ps , с другими ключами.
- 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 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник