在最近的一個項目中,須要限制 CPU 使用率。經過查閱各類資料,發現已經有直接能夠使用的軟件能夠使用,這個軟件就是cpulimit,這個軟件使用很是簡單。可是,結合實際使用場景,被限制的進程不能後臺運行,一旦後臺運行,進程即會馬上退出,並且該進程運行一段時間後會產生子進程及相關進程。針對這種狀況,通過思考,經過如下解決方案解決該問題。bash
[root@gysl-dev ~]# yum -y install epel-release [root@gysl-dev ~]# yum -y install cpulimit
[root@gysl-dev ~]# sh cpulimit.sh
cpulimit.sh腳本內容:ide
#!/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 使用率的進行啓動腳本的最前面,對該腳本的解釋。ui
因爲須要限制 CPU 使用率的進程不能在後臺運行,因此把限制腳本加入到啓動腳本的最前面,並切換到後臺運行,sleep 30秒,待須要限制的進程啓動並建立子進程後對其進行限制。this
[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%