- Команда nice, или вежливые процессы
- Как задать или изменить приоритет процесса в Linux?
- Что такое приоритет процесса?
- Как узнать приоритет процесса?
- С помощью команды top (все запущенные процессы)
- С помощью команды ps (конкретный процесс(ы) по его имени)
- С помощью команды ps (конкретный процесс по его PID)
- Задание приоритета при запуске процесса
- Изменение приоритета у существующего процесса
- Приоритеты процессов Linux
- Changing Priority on Linux Processes
- Checking the Priority of Running Processes
- Setting priority on new processes
- Setting Priority on Existing Processes
- Setting Permanent Priority on all Processes for a Specific User
Команда nice, или вежливые процессы
Когда на компьютере достаточно процессорного времени на исполнение всех процессов, нет необходимости в выставлении приоритетов. Но когда необходимо параллельно запустить несколько процессов, каждый из которых использует всё доступное процессорное время, может очень пригодиться утилита nice.
Команда nice запускает программу с изменённым приоритетом для планироващика задач. Слово «nice» в английском языке обозначает, в частности, «вежливый». По этимологии этой команды процесс с большим значением nice — более вежлив к другим процессам, позволяя им использовать больше процессорного времени, поскольку он сам имеет меньший приоритет (и, следовательно, большее «значение вежливости» — niceness value).
Наибольший приоритет (и наименьшее значение nice) — −20. 19, либо 20 — наименьший приоритет, но это, с другой стороны, самые вежливые процессы.
Чтобы посмотреть идентификатор и значение nice нужного процесса в системе, можно воспользоваться командой ps axl.
Пример использования команды nice — запуск ресурсоёмкой задачи в фоновом режиме, так, чтобы она выполнялась, но освобождала часть процессорного времени для других процессов, как только оно становятся им нужно. Таким образом можно, скажем, запустить кодирование OGG/MP3 с большим значением nice, чтобы оно происходило в фоновом режиме, используя не всё процессорное время, а то, что не используется другими процессами (с меньшим значением nice — то есть с большим приоритетом).
Чтобы запустить команду с определённым приоритетом, слева нужно добавить «nice -n значение_nice», либо «nice —adjustment значение_nice» (adjustment — настройка, регулировка).
То есть: nice -n значение_nice команда.
Если нужно изменить приоритет уже запущенного процесса, можно воспользоваться командой renice.
renice -n значение_nice id_процесса
Команда renice выводит старый и новый приоритет процесса.
Теперь, зная эти команды, можно управлять процессами так, чтобы определённые задачи выполнялись быстрее в случае, когда сразу много процессов используют всё доступное процессорное время.
Как задать или изменить приоритет процесса в 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.
Приоритеты процессов Linux
Данная тема важна так как позволяет изменять приоритет процессов в операционной системе Linux. Иногда возникает такая ситуация, что необходимо изменить приоритет процессов, какой — то процесс сделать более приоритетным, отдав побольше ресурсов, а какой-то менее приоритетным забрав часть ресурсов сервера. В данной теме мы рассмотрим следующие вопросы:
- Научимся определять приоритеты процессов;
- Рассмотрим, как запускать программы с повышенным приоритетом или с пониженным;
- Посмотрим, как изменять приоритет запущенных программы.
В 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 . Теперь изменим приоритет текущего процесса. Для этого есть следующая команда:
renice 5 -p 416802 - т.е 5 - новый приоритет , 416802 - id процесса.
Как мы видим все успешно поменялось. Вот таким образом мы можем динамически менять приоритеты. В Операционной системе Windows мы так же можем менять приоритеты в менеджере задач, но если там пять уровней, то в Linux их получается 40.
Мы можем так же менять приоритеты определенному пользователю.
renice приоритет -u пользователь
Данные команды, нам позволяют гибко управлять распределением ресурсов на нашем сервере.
Changing Priority on Linux Processes
When talking about processes priority is all about managing processor time. The Processor or CPU is like a human juggling multiple tasks at the same time. Sometimes we can have enough room to take on multiple projects. Sometimes we can only focus on one thing at a time. Other times something important pops up and we want to devote all of our energy into solving that problem while putting less important tasks on the back burner.
In Linux we can set guidelines for the CPU to follow when it is looking at all the tasks it has to do. These guidelines are called niceness or nice value. The Linux niceness scale goes from -20 to 19. The lower the number the more priority that task gets. If the niceness value is high number like 19 the task will be set to the lowest priority and the CPU will process it whenever it gets a chance. The default nice value is zero.
By using this scale we can allocate our CPU resources more appropriately. Lower priority programs that are not important can be set to a higher nice value, while high priority programs like daemons and services can be set to receive more of the CPU’s focus. You can even give a specific user a lower nice value for all of his/her processes so you can limit their ability to slow down the computer’s core services.
Checking the Priority of Running Processes
The easiest way to get a quick picture of what the current niceness priority on a process is to open up the top processes with:
Another way you can get the nice value is use ps:
This will output the process ID, command, and nice value (marked as NI).
Setting priority on new processes
At this point you are probably wondering how you can set your own priority levels on processes. To change the priority when issuing a new command you do nice -n [nice value] [command]:
This will increment the default nice value by a positive 10 for the command, ‘apt-get upgrade’ This is often useful for times when you want to upgrade apps but don’t want the extra process burden at the given time. Remember a positive number is gives less priority for a process.
Setting Priority on Existing Processes
Obviously at some point you are going to want to alter the nice value of something that is already running. Just the other day I was doing an upgrade to Ubuntu Jaunty and Firefox started to become unusably slow. A quick renice command rescheduled the upgrade to a lower priority and I was back to surfing in no time.
To change the priority of an existing process just do renice [nice value] -p [process id]:
This will increment the priority of the process with an id of 21827 to 10.
Note: Only root can apply negative nice values.
Setting Permanent Priority on all Processes for a Specific User
Sometimes it is helpful to give specific users lower priority than others to keep system resources allocated in the proper places like core services and other programs.
You can set the default nice value of a particular user or group in the /etc/security/limits.conf file.
It uses this syntax: [username] [hard|soft] priority [nice value]
backupuser hard priority 1