Как ограничить использование процессора процессом в Linux
В этом кратком руководстве мы увидим, что такое CPULimit, как установить CPULimit в Linux и как ограничить использование ЦП процессом с помощью CPULimit. > в линуксе.
Введение
Иногда конкретный процесс может потреблять больше ресурсов ЦП и влиять на производительность всей системы. Поскольку этот конкретный процесс потребляет больше ресурсов ЦП, вы не можете выполнять другие задачи. Вам нужно дождаться завершения этого процесса, прежде чем начинать новую задачу. К счастью, теперь эту проблему можно решить с помощью полезной утилиты CPULimit.
Что такое CPULimit?
Как следует из названия, CPULimit ограничивает использование ЦП процессом. Это весьма полезно для управления пакетными заданиями, если вы не хотите, чтобы они потребляли больше ресурсов ЦП.
Основная цель CPULimit — предотвратить запуск процесса дольше указанного времени. Это не меняет значение nice или другие настройки приоритета планирования, а изменяет реальную загрузку ЦП. Кроме того, он способен динамично и быстро адаптироваться к общей нагрузке системы. Он будет работать в большинстве Linux и Unix-подобных дистрибутивов.
Установите CPULimit в Linux
CPULimit доступен в репозиториях по умолчанию большинства Unix-подобных дистрибутивов. Вы можете установить его, используя менеджеры пакетов по умолчанию в соответствующем дистрибутиве Linux, как показано ниже.
В Arch Linux и его производных:
sudo pacman -S cpulimit
В Debian, Ubuntu, Linux Mint:
sudo apt-get install cpulimit
В RHEL, CentOS, Fedora:
Сначала включите репозиторий EPEL.
sudo yum install epel-release
Затем установите cpuclimit с помощью команды:
sudo yum install cpulimit
Или,
sudo dnf install cpulimit
В SUSE/openSUSE:
sudo zypper install cpulimit
Ограничьте использование ЦП процессом в Linux с помощью CPULimit
Давайте запустим программу, которая потребляет больше ресурсов процессора. Следующие команды следует запускать от имени пользователя root.
Создайте файл с именем highcpu.sh.
vi highcpu.sh
Добавьте следующее содержимое.
#!/bin/bash
while :; do :; done;
Нажмите клавишу ESC и введите :wq, чтобы сохранить и закрыть файл. Эта короткая программа будет работать бесконечно и потребляет максимальную загрузку процессора. Итак, я рекомендую вам протестировать его на виртуальной машине.
Сделайте этот файл исполняемым:
chmod +x highcpu.sh
Затем запустите процесс в фоновом режиме с помощью команды:
./highcpu.sh &
Пример вывода:
[1] 2331
Здесь 2331 — PID вышеуказанного процесса.
Чтобы просмотреть, сколько процессора он потребляет, используйте команду «top».
top
Пример вывода:
top - 17:16:34 up 10 min, 2 users, load average: 1.12, 0.53, 0.26
Tasks: 87 total, 4 running, 83 sleeping, 0 stopped, 0 zombie
%Cpu(s): 91.9 us, 2.7 sy, 5.4 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 630108 total, 274868 free, 85904 used, 269336 buff/cache
KiB Swap: 1343484 total, 1343484 free, 0 used. 428172 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2331 root 20 0 113120 1184 1004 R 97.7 0.2 2:40.91 highcpu.sh
2412 root 39 19 244516 11020 4496 R 1.3 1.7 0:00.11 dnf
10 root 20 0 0 0 0 S 0.3 0.0 0:00.68 rcu_sched
1 root 20 0 43900 6480 3900 S 0.0 1.0 0:01.61 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
11 root 20 0 0 0 0 R 0.0 0.0 0:00.38 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeb
Как видно из приведенного выше вывода, процесс highcpu.sh потребляет более 97% загрузки ЦП. Поскольку он потребляет больше ресурсов ЦП, выполнять другие задачи довольно сложно. Через несколько минут ваша система может зависнуть или зависнуть. Здесь на помощь приходит CPULimt.
Теперь давайте ограничим использование ЦП этим процессом с помощью инструмента CPULimit. Скажем, например, мы ограничим этот процесс с помощью PID до 30% загрузки ЦП.
Для этого запустите:
cpulimit -l 30 -p 2331 &
Здесь,
- Флаг "-l 30" ограничивает процесс до 30%.
- "-p 2331" – это PID файла highcpu.sh.
Теперь давайте еще раз проверим загрузку ЦП вышеуказанным процессом с помощью команды:
top
Пример вывода:
top - 17:29:16 up 5 min, 1 user, load average: 0.61, 0.57, 0.27
Tasks: 86 total, 2 running, 83 sleeping, 1 stopped, 0 zombie
%Cpu(s): 7.2 us, 0.0 sy, 0.0 ni, 92.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 630108 total, 435348 free, 78052 used, 116708 buff/cache
KiB Swap: 1343484 total, 1343484 free, 0 used. 442040 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2331 root 20 0 113120 1180 1004 T 29.7 0.2 3:36.97 highcpu.sh
2334 root 9 -11 4324 692 572 S 1.7 0.1 0:00.47 cpulimit
1 root 20 0 43900 6480 3900 S 0.3 1.0 0:01.65 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/u2:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.44 rcu_sched
11 root 20 0 0 0 0 R 0.0 0.0 0:00.37 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf
Как видно из приведенного выше вывода, загрузка ЦП файлом highcpu.sh снизилась до 29,7%, что очень близко к 30%. Теперь у вас может быть больше ресурсов ЦП для свободного запуска других процессов.
Мы увидели, как ограничить процесс с помощью PID. Альтернативно мы можем запустить указанную выше команду, указав имя исполняемого файла программы.
Например, приведенная выше команда будет такой:
cpulimit -l 30 ./highcpu.sh &
Аналогично, вы можете запускать любое количество процессов в фоновом режиме и ограничивать их использование ЦП по своему усмотрению.
Вы можете в любой момент перевести процессы, работающие в фоновом режиме, на передний план с помощью команды "fg":
fg
Пример вывода:
cpulimit -l 30 -p 2331
Заключение
CPULimit может быть полезен, когда вы запускаете процесс, который потребляет больше ресурсов ЦП. В следующий раз, если вы заметите, что программа потребляет больше ресурсов ЦП, просто найдите PID процесса с помощью команды «top» и ограничьте использование ЦП до минимального значения с помощью команды CPULimit, как описано выше. Вы также можете использовать это приложение, чтобы проверить, как приложение работает при низкой загрузке ЦП.
Ресурс:
- CPULimit на GitHub