Приоритет процесса linux это

Для каких целей необходим приоритет процесса?

Что она делает? Приоритет чего она подняла с 0 до 10? Ман читал, но чет не понял. UPD: Я правильно понимаю, что чем выше приоритет, тем меньше памяти потребляет процесс?

2 ответа 2

Значение уступчивости или любезности (nice, niceness) — это концепция приоритета процесса в UNIX-подобных ОС. Оно определяет, насколько данный конкретный процесс любезен по отношению к остальным и готов уступить им процессорное время т.е. оно противоположно понятию приоритет.

Чем больше приоритет процесса, тем больше шанс, что данный процесс получит квант времени (а статистически говоря быстрее выполнится полностью), когда одновременно несколько процессов конкурируют за процессор, т.е. работают одновременно. Это далеко не единственный параметр, влияющий на работу планировщика (например процессы root ‘а имеют больший приоритет априори), но основной доступный пользователю напрямую.

Диапазон значений в современном Linux составляет от -20 (наименьшая уступчивость и наибольший приоритет) до 19 (соответственно наоборот, наибольшая уступчивость и наименьший приоритет); причём изменения на 1 пункт примерно соответствует уменьшению шанса занять ЦП в 1.25 раз (см. man 7 sched , раздел The nice value).

Само собой, обычный пользователь может изменять значения приоритетов только своих процессов, а для установки уступчивости ниже определённого уровня (значения $(( 40 — $(ulimit -e) )) , по умолчанию 0; задаётся в /etc/security/limits.conf ) процесс должен обладать мандатом CAP_SYS_NICE или правами root.

С распределением памяти всё это ни как не связано.

Пример

Для примера, есть два процесса, которые выполняют сложные математические расчёты в однопроцессорной системе: foo и bar , по умолчанию их уступчивость равна нулю (ps -l):

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 R 1000 19431 24534 0 80 0 - 5066 - pts/5 00:10:13 ./foo 0 R 1000 19433 24534 0 80 0 - 3566 - pts/5 00:11:14 ./bar 

Как можно видеть они выполняются уже довольно долго (значение потребления процессорного времени в TIME ). В этот момент мы решаем, что результаты bar там важен намного сильнее, чем foo и делаем:

Читайте также:  What is linux kernel firmware

И примерно через 10 минут ситуация будет следующая:

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 R 1000 19431 24534 0 80 10 - 5066 - pts/5 00:10:55 ./foo 0 R 1000 19433 24534 0 80 0 - 3566 - pts/5 00:20:03 ./bar 

т.е. bar получил в несколько раз больше времени ЦП; и соответственно должен завершить расчёты намного быстрее.

Источник

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

img

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

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

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

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

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

ps alx

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

ps -eo user,pid,pcpu,nice,comm

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

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

Читайте также:  Nvidia drivers linux x64

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

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

sleep 10000

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

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

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

появился наш процесс со значение 10 по умолчанию

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

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

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

nice –n -20 sleep 6000 &

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

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

nice -n -20 sleep 6000

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

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

renice 5 -p 416802 - т.е 5 - новый приоритет , 416802 - id процесса.

renice 5 -p 416802 - т.е 5 - новый приоритет , 416802 - id процесса.

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

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

renice приоритет -u пользователь

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

Источник

Как задать или изменить приоритет процесса в Linux?

Как задать или изменить приоритет процесса в Linux?

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

Читайте также:  Vmlinuz file in 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 -o pid,comm,nice -C mysqld PID COMMAND NI 706 mysqld 0

С помощью команды ps (конкретный процесс по его PID)

ps -o pid,comm,nice 706 PID COMMAND NI 706 mysqld 0

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

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

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

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

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

sudo renice 0 -p 15483 15483 (process ID) old priority 15, new priority 0

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

Источник

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