Как управлять приоритетом процесса в Linux с помощью команд nice и renice

В этом уроке мы поговорим о том, как вы расставляете приоритеты для процессов, которые они запускают в системе Linux.

В моей предыдущей статье я объяснил следующие концепции и прошу вас прочитать эти руководства:

Вступление

Теперь вспомните, что Linux – это многозадачная операционная система.

Следовательно, процессорное время вращается между каждым из процессов, которые в настоящее время выполняются в системе, создавая иллюзию того, что все эти процессы выполняются одновременно.

Теперь, поскольку Linux является многозадачной операционной системой, вы можете указать уровень приоритета для каждого процесса, запущенного в системе.

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

Теперь по умолчанию Linux действительно не уделяет много внимания приоритетам.

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

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

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

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

Что ж, вы можете сделать это с помощью нескольких утилит Linux.

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

Итак, в этом уроке мы поговорим о том, как расставить приоритеты с помощью nice команда и как вы можете установить приоритет процесса, который уже запущен с renice команда.

Начнем с того, что посмотрим, как можно использовать nice утилита.

Установите приоритеты с помощью красивой команды

В nice Утилиту можно использовать для запуска нового процесса в системе Linux с индивидуальным уровнем приоритета.

Теперь вспомните как top и ps утилиты можно использовать для отображения информации о процессах, запущенных в системе Linux.

И два значения, которые будут отображаться ps а также top являются PR ценность, которая является приоритетом, и хорошая ценность, которая является NI.

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
30738 helpdesk  20   0 2955736 105168  29692 S   8.3  13.0   2:56.70 gnome-shell
31252 helpdesk  20   0  534516  21444  13576 S   1.3   2.6   0:11.46 gnome-terminal-
    1 root      20   0  262096   5536   3184 S   0.0   0.7   0:11.67 systemd
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd
    3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
    4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
    6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd

Понимание ценности PR (приоритета)

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

Чем выше номер приоритета, тем ниже приоритет процесса. Это как-то нелогично.

В этом примере у нас есть большинство этих процессов, работающих со значением приоритета 20, но есть также процессы, которые имеют значение приоритета 0.

Как видите, kworker / 0: 0H-kblockd команда имеет приоритет 0.

Потому что kworker / 0: 0H-kblockd использует меньшее число, это на самом деле процесс с более высоким приоритетом, чем все другие процессы со значением приоритета 20.

Просто помните, что в столбце приоритета чем меньше число, тем выше приоритет процесса.

Понимание ценности NI (Nice)

Помимо приоритета, который вам необходимо знать о Приятной ценности, она отображается в NI столбец.

В NI value – это приятная ценность процесса, она в основном определяет, насколько хорош процесс.

Чем лучше процесс, тем меньше процессорного времени он потребует, чем менее приятен процесс, тем больше процессорного времени он потребует.

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

Теперь значение nice для любого процесса Linux может находиться в диапазоне от -20 до +19.

Теперь обратите внимание на вывод top команда здесь, что большинство этих процессов имеют точно такое же значение Nice.

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
30738 helpdesk  20   0 2955736 105168  29692 S   8.3  13.0   2:56.70 gnome-shell
31252 helpdesk  20   0  534516  21444  13576 S   1.3   2.6   0:11.46 gnome-terminal-
    1 root      20   0  262096   5536   3184 S   0.0   0.7   0:11.67 systemd
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd
    3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
    4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
    6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd

По умолчанию они имеют значение 0, что в основном дает им одинаковый приоритет в системе.

Обратите внимание, однако, что есть несколько исключений, таких как kworker/0:0H-kblockd Процесс, он имеет значение Nice -20.

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

Важно помнить, что чем ниже значение Nice, тем ниже будет значение приоритета и, следовательно, выше общий приоритет процесса в системе.

Как использовать красивую команду

Вот еще одна ключевая вещь, которую вам нужно понять, это тот факт, что вы не можете напрямую управлять приоритетом процесса, но вы можете манипулировать им косвенно, настраивая значение Nice процесса.

Самый простой способ сделать это – установить для процесса значение Nice, когда вы первоначально загружаете этот процесс в командной строке и делаете это с помощью nice команда.

Здесь показан синтаксис, вы вводите nice -n за которым следует хороший уровень, который вы хотите назначить процессу, за которым следует имя фактической команды, которую вы хотите запустить.

Синтаксис: nice -n nice_level command

Например, предположим, что я хотел запустить gedit программу из командной строки.

gedit это графический текстовый редактор, который можно использовать в системах Linux.

Но я хочу запустить gedit с повышенным приоритетом в системе, потому что я серьезно отношусь к редактированию текста.

Теперь по умолчанию, если я просто бегу gedit из приглашения оболочки он получит приоритет 80 в системе, потому что ему будет присвоено хорошее значение 0.

# ps -elf
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 I root           8       2  0  60 -20 -     0 -      May11 ?        00:00:00 [mm_percpu_wq]
1 S root           9       2  0  80   0 -     0 -      May11 ?        00:00:03 [ksoftirqd/0]
1 I root         484       2  0  60 -20 -     0 -      May11 ?        00:00:00 [ttm_swap]
0 S helpdesk   40156   30633  1  80   0 - 140623 x64_sy 22:56 ?       00:00:00 /usr/bin/gedit --gapplication-service
0 R root       40187   32751  0  80   0 - 14455 -      22:56 pts/0    00:00:00 ps -elf
4 S root       32746   31257  0  80   0 - 33371 -      14:52 pts/0    00:00:00 su
4 S root       32751   32746  0  80   0 -  6730 -      14:52 pts/0    00:00:00 bash

Это значение Nice 0 используется ядром для вычисления общего приоритета этого процесса и с использованием его различных вычислений, которое оказывается равным 80.

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

Например, здесь я ввел nice -n -15 за которым следует gedit команда.

# nice -n -15 gedit

Помните, что по умолчанию значение nice равно 0, теперь я уменьшаю его до -15.

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

# ps -elf
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 I root           8       2  0  60 -20 -     0 -      May11 ?        00:00:00 [mm_percpu_wq]
1 S root           9       2  0  80   0 -     0 -      May11 ?        00:00:03 [ksoftirqd/0]
1 I root         484       2  0  60 -20 -     0 -      May11 ?        00:00:00 [ttm_swap]
0 S helpdesk   40156   30633  1  65 -15 - 140623 x64_sy 22:56 ?       00:00:00 /usr/bin/gedit --gapplication-service
0 R root       40187   32751  0  80   0 - 14455 -      22:56 pts/0    00:00:00 ps -elf
4 S root       32746   31257  0  80   0 - 33371 -      14:52 pts/0    00:00:00 su
4 S root       32751   32746  0  80   0 -  6730 -      14:52 pts/0    00:00:00 bash

После выполнения команды мое значение Nice уменьшилось до -15, а мой номер приоритета уменьшился до 65 с 80, что увеличивает общий приоритет этого процесса в системе.

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

Поскольку Linux – это настоящая многопользовательская операционная система, несколько пользователей одной системы могут настраивать значения Nice для своих собственных процессов.

А теперь, когда человеческая природа является естественной, что все будут делать?

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

И мы закончим большим перетягиванием каната.

Поэтому, чтобы этого не происходило, Linux не позволит вам изменить значение процесса Nice ниже 0, если вы не вошли в систему как root.

Это означает, что если вы не являетесь пользователем root, вам не будет разрешено использовать отрицательное число с nice команда.

Установите приоритеты с помощью команды renice

Сейчас nice Команда отлично подходит для изменения значения Nice, когда вы изначально запускаете команду, которая запрашивает оболочку для запуска процесса.

Но что вы делаете с процессом, который вы хотите изменить, уже запущен, и вы действительно не хотите или не можете его перезапустить.

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

Что ж, в этой ситуации вы не можете использовать nice вместо этого вы можете использовать renice команда.

Вместо того, чтобы убить процесс и перезапустить его с помощью nice чтобы сбросить его Хорошее значение.

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

Как использовать команду renice

Мы бежим renice -n за которым следует уровень nice, который мы хотим назначить, и на этот раз мы ссылаемся на номер идентификатора процесса (PID) процесса, значение nice которого мы хотим изменить.

Синтаксис: renice -n nice_level PID

Итак, в этом примере у меня уже есть gedit запущенный в системе, он имеет хорошее значение -15, а его уровень приоритета равен 65.

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

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

И поскольку я по-прежнему серьезно отношусь к редактированию текста, я не хочу выходить из gedit и перезагрузите его с помощью Nice, вместо этого хотите динамически изменять его значение Nice, пока он все еще работает.

Итак, первое, что я делаю, это бегу ps -elf чтобы узнать идентификатор процесса (PID) gedit процесс, который в данном случае 40156.

# ps -elf
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 I root           6       2  0  60 -20 -     0 -      May13 ?        00:00:00 [kworker/0:0H-kblockd]
0 S root       48359    1048  0  80   0 -  1820 hrtime 01:23 ?        00:00:00 sleep 60
4 S root       48360       1  0  80   0 - 61161 x64_sy 01:23 ?        00:00:00 /usr/libexec/fprintd
0 S helpdesk   48404   30633  0  80   0 - 80189 x64_sy 01:23 ?        00:00:00 /usr/libexec/gnome-boxes-search-provider
0 S helpdesk   48405   30633  4  80   0 - 238057 x64_sy 01:23 ?       00:00:00 /usr/bin/nautilus --gapplication-service
0 S helpdesk   48407   30633  1  80   0 - 107318 x64_sy 01:23 ?       00:00:00 /usr/libexec/gnome-control-center-search-provider
0 S helpdesk   40156   30633  1  65 -15 - 140624 x64_sy 01:23 ?       00:00:00 /usr/bin/gedit --gapplication-service
0 R root       48458   32751  0  80   0 - 14455 -      01:23 pts/0    00:00:00 ps -elf

Итак, я могу запустить renice и я указываю хорошее значение 4.

# renice -n 4 40156

Теперь обратите внимание, когда я запускаю ps -elf команду во второй раз, и если я посмотрю на приоритет и значение Nice gedit процесс, теперь он намного выше, чем был до создания gedit гораздо более дружелюбная программа.

# ps -elf
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 I root           6       2  0  60 -20 -     0 -      May13 ?        00:00:00 [kworker/0:0H-kblockd]
0 S root       48359    1048  0  80   0 -  1820 hrtime 01:23 ?        00:00:00 sleep 60
4 S root       48360       1  0  80   0 - 61161 x64_sy 01:23 ?        00:00:00 /usr/libexec/fprintd
0 S helpdesk   48404   30633  0  80   0 - 80189 x64_sy 01:23 ?        00:00:00 /usr/libexec/gnome-boxes-search-provider
0 S helpdesk   48405   30633  4  80   0 - 238057 x64_sy 01:23 ?       00:00:00 /usr/bin/nautilus --gapplication-service
0 S helpdesk   48407   30633  1  80   0 - 107318 x64_sy 01:23 ?       00:00:00 /usr/libexec/gnome-control-center-search-provider
0 S helpdesk   40156   30633  1  84   4 - 140624 x64_sy 01:23 ?       00:00:00 /usr/bin/gedit --gapplication-service
0 R root       48458   32751  0  80   0 - 14455 -      01:23 pts/0    00:00:00 ps -elf

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

Я получу меньше внимания процессора, чем другие процессы, запущенные в системе.

Следует быстро запомнить, что когда вы используете renice вы по-прежнему ограничены тем же правилом, о котором мы говорили nice.

И это тот факт, что вы должны войти в систему как root, если вы хотите настроить уровень запущенного процесса Nice на число меньше 0, другими словами -ve количество.

Если вы вошли в систему как обычный пользователь, вы можете установить только значение 0 или выше.

Заключение

Я надеюсь, что теперь вы хорошо понимаете, как управлять приоритетом процесса в Linux с помощью команд nice и renice.

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *