- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Приоритеты процессов Linux
- Как задать или изменить приоритет процесса в Linux?
- Что такое приоритет процесса?
- Как узнать приоритет процесса?
- С помощью команды top (все запущенные процессы)
- С помощью команды ps (конкретный процесс(ы) по его имени)
- С помощью команды ps (конкретный процесс по его PID)
- Задание приоритета при запуске процесса
- Изменение приоритета у существующего процесса
- Комментарии к статье (5)
- A brief guide to priority and nice values in the linux ecosystem
- setpriority(2) — Linux man page
- Synopsis
- Description
- Return Value
- Errors
- Conforming to
- Notes
ИТ База знаний
Курс по 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 , с другими ключами.
- 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?
В некоторых ситуациях может возникнуть необходимость запускать скрипт/программу не со стандартным приоритетом, а с более высоким или низким, либо повысить или понизить приоритет у запущенного ранее процесса. В данной статье мы рассмотрим несколько способов, как можно это с делать.
Что такое приоритет процесса?
Приоритет процесса определяет, как часто именно этот процесс, по сравнению с другими запущенными процессами, стоящими в очереди на выполнение, будет исполняться процессором. В ОС 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
очень полезная статья, каждый раз узнаю здесь что-то новое
Источник
A brief guide to priority and nice values in the linux ecosystem
Apr 16, 2019 · 4 min read
How does Linux do memory management to execute your processes is a little complicated thing to explain. But luckily all the abstracted details around memory management like memory allocation and context switching b/w processes are very well optimized and developers don’t have to worry about these things while writing high-level code.
What we should generally take into consideration is the amount of CPU bandwidth that our processes are eligible for, especially in cases of contention with other processes sharing the processing power of the CPU.
Before we jump i nto the priority and nice values and how they help us; It is important to have a top-level understanding of how CPUs run multiple processes at the same time.
Basically, if a CPU has n cores then it can only execute n processes in parallel.
When the number of processes is more than n, the processes are switched between very fast using advanced context-switching mechanisms to provide multitasking. This lets us run multiple processes on a CPU even if it has just 1 core.
Why worry about the priority of your process?
Some processes may be highly CPU-intensive but not as important as others and hence can have a lower priority while others may or may not be highly CPU-intensive but are very important and hence should have higher priority.
For example- if there is a process A, which detects fraud with input data and there is another process B, which makes hourly backups of some data, then the priority(A) > priority(B)!
This ensures that if both A and B are running at the same time, A would be allocated more processing bandwidth.
Now that we have enough context, let’s dive into the specifics.
Priority value — The priority value is the process’s actual priority which is used by the Linux kernel to schedule a task.
In Linux system priorities are 0 to 139 in which 0 to 99 for real-time and 100 to 139 for users.
Nice value — Nice values are user-space values that we can use to control the priority of a process. The nice value range is -20 to +19 where -20 is highest, 0 default and +19 is lowest.
The relation between nice value and priority is as such —
Priority_value = Nice_value + 20
To see how these work together let us take a process that takes a lot of processing power continuously. I’ll use a shell script (infinite.sh) which has an infinite loop in it to demonstrate how this works.
We’ll run this on a single core CPU for easy understanding & use top command (a program that periodically displays a sorted list of system processes and their details like pid, priority value, nice value, CPU usage, etc.) to monitor processes.
The output for top before running infinite.sh:
Once we run infinite.sh in the background using sh infinite.sh & we see that this process (PID-28) is taking 100% processing power of the CPU.
If I run two more processes of infinite.sh then all of them (PID-28,30,32) get equal CPU as all have the same priority.
Now let us give these processes different nice values.
There are two ways to do this:
1. Start the process with the nice value in the command as
nice -n nice_val [command]
For us, it could be something like nice -n 10 sh infinite.sh &
When we run this we get another process (PID-34) with the priority as 30 (as priority = 20 + nice_value). As it has the least priority, it gets the least amount of CPU.
2. Change the nice value of a running process using its PID using renice as renice -n nice_val -p [pid]
For us, it could be something like renice -n 5 -p 28
When we run this, the process with PID-28 gets its priority set from 20 to 25 and the CPU is allocated accordingly.
Note: Only root user can set the nice value from -20 to 19. Other users can only set nice values from 0 to 19.
You can also use renice to set nice values to all processes by a user using renice -n nice_val -u [user]
Источник
setpriority(2) — Linux man page
Synopsis
Description
The value which is one of PRIO_PROCESS, PRIO_PGRP, or PRIO_USER, and who is interpreted relative to which (a process identifier for PRIO_PROCESS, process group identifier for PRIO_PGRP, and a user ID for PRIO_USER). A zero value for who denotes (respectively) the calling process, the process group of the calling process, or the real user ID of the calling process. Prio is a value in the range -20 to 19 (but see the Notes below). The default priority is 0; lower priorities cause more favorable scheduling.
The getpriority() call returns the highest priority (lowest numerical value) enjoyed by any of the specified processes. The setpriority() call sets the priorities of all of the specified processes to the specified value. Only the superuser may lower priorities.
Return Value
Errors
In addition to the errors indicated above, setpriority() may fail if: EACCES The caller attempted to lower a process priority, but did not have the required privilege (on Linux: did not have the CAP_SYS_NICE capability). Since Linux 2.6.12, this error only occurs if the caller attempts to set a process priority outside the range of the RLIMIT_NICE soft resource limit of the target process; see getrlimit(2) for details. EPERM A process was located, but its effective user ID did not match either the effective or the real user ID of the caller, and was not privileged (on Linux: did not have the CAP_SYS_NICE capability). But see NOTES below.
Conforming to
Notes
The degree to which their relative nice value affects the scheduling of processes varies across UNIX systems, and, on Linux, across kernel versions. Starting with kernel 2.6.23, Linux adopted an algorithm that causes relative differences in nice values to have a much stronger effect. This causes very low nice values (+19) to truly provide little CPU to a process whenever there is any other higher priority load on the system, and makes high nice values (-20) deliver most of the CPU to applications that require it (e.g., some audio applications).
The details on the condition for EPERM depend on the system. The above description is what POSIX.1-2001 says, and seems to be followed on all System V-like systems. Linux kernels before 2.6.12 required the real or effective user ID of the caller to match the real user of the process who (instead of its effective user ID). Linux 2.6.12 and later require the effective user ID of the caller to match the real or effective user ID of the process who. All BSD-like systems (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3, OpenBSD-2.5, . ) behave in the same manner as Linux 2.6.12 and later.
The actual priority range varies between kernel versions. Linux before 1.3.36 had -infinity..15. Since kernel 1.3.43 Linux has the range -20..19. Within the kernel, nice values are actually represented using the corresponding range 40..1 (since negative numbers are error codes) and these are the values employed by the setpriority() and getpriority() system calls. The glibc wrapper functions for these system calls handle the translations between the user-land and kernel representations of the nice value according to the formula unice = 20 — knice.
On some systems, the range of nice values is -20..20.
Including is not required these days, but increases portability. (Indeed, defines the rusage structure with fields of type struct timeval defined in .)
Источник