Ubuntu · 6 min read · Sep 19, 2025

Как ограничить использование ЦП с помощью CPULimit на Ubuntu Linux

Команда cpulimit предназначена для ограничения использования ЦП конкретным процессом в Linux, обеспечивая, чтобы оно не превышало установленный порог. Это может быть особенно полезно для управления системными ресурсами и предотвращения монополизации времени ЦП одним процессом, что может ухудшить общую производительность системы. Указывая желаемый предел использования ЦП в процентах, пользователи могут применять ограничения к запущенным процессам или инициировать новые с контролируемым потреблением ЦП. Инструмент отправляет сигналы SIGSTOP и SIGCONT целевому процессу, приостанавливая и возобновляя его, чтобы поддерживать установленный предел использования.

1 Предварительная заметка

Этот учебник был протестирован на Ubuntu 24.04, но он также работает на более старых версиях Ubuntu.

2 Установка CPULimit

Сначала нам нужно установить cpulimit следующим образом:

sudo apt update  
sudo apt install cpulimit

3 Ограничение использования ЦП

Теперь мы проверим утилиту для ограничения использования ЦП. Для этого мы сначала проверим использование ЦП без CPUlimit, а затем применим CPUlimit для его оценки. Давайте проиллюстрируем это на примере.

  1. Вот пример того, как использовать ваш ЦП с приложением на одноядерном ЦП:
dd if=/dev/zero of=/dev/null &

Затем мы проверим использование ЦП с помощью команды:

top
top - 11:24:18 up 49 min,  1 user,  load average: 0.94, 1.02, 1.79  
Tasks: 249 total,   2 running, 247 sleeping,   0 stopped,   0 zombie  
%Cpu(s): 13.4 us, 11.6 sy,  0.0 ni, 74.9 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st  
KiB Mem:   1010540 total,   271652 used,   738888 free,    21760 buffers  
KiB Swap:  1048572 total,        0 used, 1048572 free.   158204 cached Mem  
  
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                    
 1850 root      20   0    7224    616    520 R 100.0  0.1   1:20.33 dd                       
 1851 root      20   0   24952   1756   1180 R   0.3  0.2   0:00.03 top                       
    1 root      20   0   33480   2776   1456 S   0.0  0.3   0:05.31 init                      
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd          

Как мы видим, использование ЦП достигло 100%. Теперь мы будем использовать cpulimit для ограничения использования ЦП. Мы можем вернуть этот процесс на передний план, используя команду fg, и отменить его с помощью CTRL+C.

fg

Вернуть процесс на передний план с помощью команды fg

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

cpulimit -l 30 dd if=/dev/zero of=/dev/null &

root@server1:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &

[1] 1852

root@server1:~# Процесс 1853 обнаружен

[1]+ Done cpulimit -l 30 dd if=/dev/zero of=/dev/null

root@server1:~#

Теперь мы проверим использование ЦП с помощью команды top:

top

top - 11:30:54 up 55 min, 1 user, load average: 0.20, 0.58, 1.34

Tasks: 250 total, 2 running, 247 sleeping, 1 stopped, 0 zombie

%Cpu(s): 4.5 us, 4.1 sy, 0.0 ni, 91.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1010540 total, 271944 used, 738596 free, 21816 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 158212 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1853 root 20 0 7224 612 520 T 33.8 0.1 0:35.53 dd

1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.37 init

2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0

4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0 Теперь вы можете видеть, что использование ЦП снизилось с 100% до 33.8%, почти на 30%. Таким образом, мы успешно проверили утилиту cpulimit, которая может ограничить использование ЦП в одноядерной дистрибутиве Ubuntu.

  1. Вот пример того, как использовать ваш ЦП с приложением на многоядерном ЦП:

Чтобы проверить количество ядер вашего ЦП, используйте команду:

nproc    

В моем случае количество ядер ЦП было 4.
Теперь мы продолжим проверять использование ЦП без cpulimit на всех 4 ядрах для приложения следующим образом:

for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done

Это выполнит команду, используя все ядра, и выдаст следующий вывод:

root@server1:~# for j in seq 1 4; do dd if=/dev/zero of=/dev/null & done

[1] 1263

[2] 1264

[3] 1265

[4] 1266

root@server1:~#

Теперь проверьте использование ЦП с помощью команды top:

top

top - 11:47:45 up 4 min, 1 user, load average: 3.63, 1.53, 0.57

Tasks: 290 total, 5 running, 285 sleeping, 0 stopped, 0 zombie

%Cpu0 : 48.3 us, 51.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

%Cpu1 : 47.8 us, 52.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu2 : 53.3 us, 46.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

%Cpu3 : 52.0 us, 48.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1010540 total, 209712 used, 800828 free, 20276 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 93632 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1263 root 20 0 7224 612 520 R 100.0 0.1 2:21.40 dd

1264 root 20 0 7224 616 520 R 100.0 0.1 2:21.41 dd

1265 root 20 0 7224 612 520 R 99.0 0.1 2:21.03 dd

1266 root 20 0 7224 616 520 R 98.0 0.1 2:20.82 dd

1281 root 20 0 104416 3992 2920 S 1.0 0.4 0:00.03 sshd

1283 root 20 0 104416 3988 2920 S 1.0 0.4 0:00.03 sshd

1279 root 20 0 104556 4008 2924 S 0.7 0.4 0:00.08 sshd

Команда dd потребляет почти 100% ЦП всех ядер. Далее мы проверим команду с утилитой cpulimit. Для этого убейте предыдущие следы команды dd следующим образом:

killall dd

root@server1:~# killall dd

[1] Terminated dd if=/dev/zero of=/dev/null

[3]- Terminated dd if=/dev/zero of=/dev/null

[2]- Terminated dd if=/dev/zero of=/dev/null

[4]+ Terminated dd if=/dev/zero of=/dev/null

root@server1:~#

Теперь используйте cpulimit с той же командой следующим образом:

for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done

root@server1:~# for j in seq 1 4; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done

[1] 1429

[2] 1430

[3] 1431

[4] 1432

root@server1:~# Процесс 1434 обнаружен

Процесс 1433 обнаружен

Процесс 1437 обнаружен

Процесс 1439 обнаружен

[1] Done cpulimit -l 20 dd if=/dev/zero of=/dev/null

[2] Done cpulimit -l 20 dd if=/dev/zero of=/dev/null

[3]- Done cpulimit -l 20 dd if=/dev/zero of=/dev/null

[4]+ Done cpulimit -l 20 dd if=/dev/zero of=/dev/null

root@server1:~#

Теперь проверьте использование ЦП с утилитой cpulimit.

top

top - 11:59:10 up 16 min, 2 users, load average: 0.47, 0.71, 0.81

Tasks: 256 total, 2 running, 251 sleeping, 3 stopped, 0 zombie

%Cpu0 : 2.0 us, 2.0 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu1 : 26.2 us, 22.8 sy, 0.0 ni, 50.7 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

%Cpu2 : 14.0 us, 12.3 sy, 0.0 ni, 73.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu3 : 13.3 us, 11.6 sy, 0.0 ni, 75.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1010540 total, 204064 used, 806476 free, 20408 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 98340 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1433 root 20 0 7224 612 520 T 28.2 0.1 0:12.00 dd

1439 root 20 0 7224 616 520 R 26.6 0.1 0:12.13 dd

1434 root 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd

1437 root 20 0 7224 612 516 T 22.9 0.1 0:11.93 dd

7 root 20 0 0 0 0 S 0.3 0.0 0:00.22 rcu_sched

8 root 20 0 0 0 0 S 0.3 0.0 0:00.21 rcuos/0

Как вы можете видеть выше, использование ЦП ограничено с 100% до 20% почти для многоядерных ЦП.

Поздравляем! Мы успешно протестировали cpulimit для ограничения использования ЦП в Ubuntu.

4 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.