乙個限制程序 CPU 使用率的解決方案

2021-09-12 17:29:17 字數 3245 閱讀 5145

三 總結

在最近的乙個專案中,需要限制 cpu 使用率。通過查閱各種資料,發現已經有直接可以使用的軟體可以使用,這個軟體就是cpulimit,這個軟體使用非常簡單。但是,結合實際使用場景,被限制的程序不能後台執行,一旦後台執行,程序即會立刻退出,而且該程序執行一段時間後會產生子程序及相關程序。針對這種情況,經過思考,通過以下解決方案解決該問題。

cpulimit 的原理:為程序預設乙個 cpu 佔用率上限,並實時監控程序是否超出此上限值,若超出則讓該程序暫停執行一段時間。cpulimit 使用 sigstop 和 sigcont 這兩個訊號來控制程序。它不會修改程序的 nice 值,而是通過監控程序的 cpu 佔用率來做出動態調整。

cpulimit 的優勢是可以控制程序的cpu使用率的上限值。但與 nice 相比也有缺點,那就是即使 cpu 是空閒的,程序也不能完全使用整個 cpu 資源。

[root@gysl-dev ~]

# yum -y install epel-release

[root@gysl-dev ~]

# yum -y install cpulimit

[root@gysl-dev ~]

# sh cpulimit.sh

cpulimit.sh指令碼內容:

#!/bin/bash

while

true;do

sleep 30;

pgrep palrun>

&/dev/null;if[

$? -eq 0 ]

;then

for pid in

`pgrep palrun`

;do

cpulimit -l 70 -p $pid

&done

;break;fi

;done

&

將以上指令碼加入到需要限制 cpu 使用率的進行啟動指令碼的最前面,對該指令碼的解釋。

由於需要限制 cpu 使用率的程序不能在後台執行,所以把限制指令碼加入到啟動指令碼的最前面,並切換到後台執行,sleep 30秒,待需要限制的程序啟動並建立子程序後對其進行限制。

[root@gysl-dev ~]

# cpulimit --help

usage: cpulimit [options...] target

options

-l, --limit=n percentage of cpu allowed from 0 to 100 (required)

#限制 cpu 使用百分比

-v, --verbose show control statistics #顯示控制統計

-z, --lazy exit

if there is no target process, or if it dies

-i, --include-children limit also the children processes #同時也限制子程序

-h, --help display this help and exit

target must be exactly one of these:

-p, --pid=n pid of the process (implies -z)

-e, --exe=file name of the executable program file or path name

command [args] run this command and limit it (implies -z)

[root@gysl-dev ~]# cpulimit -l 70 -v -p 6258

1 cpu detected

process 6258 found

priority changed to -10

members in the process group owned by 6258: 1

%cpu work quantum sleep quantum active rate

70.09% 73424 us 26575 us 73.42%

69.86% 70778 us 29221 us 70.78%

69.94% 71703 us 28296 us 71.70%

69.77% 70495 us 29504 us 70.50%

69.91% 74194 us 25805 us 74.19%

69.49% 69281 us 30718 us 69.28%

69.78% 72668 us 27331 us 72.67%

70.35% 70634 us 29365 us 70.63%

69.66% 72786 us 27213 us 72.79%

70.27% 69679 us 30320 us 69.68%

69.56% 72325 us 27674 us 72.33%

70.40% 71926 us 28073 us 71.93%

69.43% 71330 us 28669 us 71.33%

69.50% 72184 us 27815 us 72.18%

70.16% 69835 us 30164 us 69.84%

69.37% 74080 us 25919 us 74.08%

69.84% 69417 us 30582 us 69.42%

69.95% 71415 us 28584 us 71.42%

70.81% 71334 us 28665 us 71.33%

本次實驗使用了比較老舊的版本,僅支援單 cpu 的資源限制。筆者在後來的 v2.4 版本實踐中發現,新版本支援多 cpu 的資源限制。

cpulimit原始碼

乙個限制程序 CPU 使用率的解決方案

在最近的乙個專案中,需要限制 cpu 使用率。通過查閱各種資料,發現已經有直接可以使用的軟體可以使用,這個軟體就是cpulimit,這個軟體使用非常簡單。但是,結合實際使用場景,被限制的程序不能後台執行,一旦後台執行,程序即會立刻退出,而且該程序執行一段時間後會產生子程序及相關程序。針對這種情況,經...

乙個限制程序 CPU 使用率的解決方案

在最近的乙個專案中,需要限制 cpu 使用率。通過查閱各種資料,發現已經有直接可以使用的軟體可以使用,這個軟體就是cpulimit,這個軟體使用非常簡單。但是,結合實際使用場景,被限制的程序不能後台執行,一旦後台執行,程序即會立刻退出,而且該程序執行一段時間後會產生子程序及相關程序。針對這種情況,經...

通過Cgroup限制程序cpu使用率

1 找到需要限制的程序 2 到cgroup目錄建立乙個專用目錄 cd sys fs cgroup cpu mkdir mysql cd mysql echo 22112 cgroup.procs 22112 是第一步中找到的程序id echo 200000 cpu.cfs quota us 這是限制...