使用nice,cpulimit和cgroups限制程序CPU使用率
大多數程序以相同的優先順序啟動,Linux核心在處理器上均勻地為每個任務安排時間。有一個CPU密集型程序可以以較低的優先順序執行嗎?然後你需要告訴排程程式有關它!
至少有三種方法可以控制程序獲得的CPU時間:
- 使用nice命令手動降低任務的優先順序。
- 使用cpulimit命令重複暫停執行程序,使其不超過某個限制。
- 使用Linux的內建控制組,這種機制告訴排程程式限制程序可用的資源量。
nice
nice命令調整程序的優先順序,使其執行頻率降低。當您需要將CPU密集型任務作為後臺或批處理作業執行時,這非常有用。程度範圍從-20(最有利的排程)到19(最不利的)。Linux上的程序預設情況下以0的良好狀態啟動。nice命令(沒有任何附加引數)將啟動一個程度為10的程序。在該級別,排程程式將其視為優先順序較低的任務併為其提供較少的CPU資源。
Nice有一個名為的相關命令renice。它改變了已經執行的程序的niceness級別。要使用它,找出佔用所有CPU時間的程序的PID(使用ps),然後執行renice:
renice +10 1234
其中1234是PID。
CPULimit
cpulimit工具通過以不同的間隔暫停程序來限制程序的CPU使用率,以使其保持在定義的上限之下。它通過向程序傳送SIGSTOP和SIGCONT訊號來實現此目的。它不會更改nice程序的值,而是監視和控制實際的CPU使用情況。
當您想要確保程序不使用超過CPU的某個部分時,cpulimit非常有用。
相比nice的缺點是當系統空閒時,程序無法使用所有可用的CPU時間。
安裝:
wget -O cpulimit.zip https:<font><i>//github.com/opsengine/cpulimit/archive/master.zip</i></font><font> unzip cpulimit.zip cd cpulimit-master make sudo cp src/cpulimit /usr/bin </font>
上面的命令將從GitHub下載原始碼,解壓縮歸檔檔案,構建二進位制檔案並將其複製到/usr/bin。
cpulimit的使用類似nice的方式,但是您需要使用'-l'引數顯式定義程序的最大CPU限制。
可以通過使用'-p'引數指定其PID來限制當前正在執行的程序。例如
cpulimit -l 50 -p 1234
其中1234是PID。
cgroup
控制組(cgroup)是Linux核心功能,允許您指定核心應如何將特定資源分配給一組程序。使用cgroup,您可以指定駐留在特定組中的程序可以使用多少CPU時間,系統記憶體,網路頻寬或這些資源的組合。
控制組的優勢超過nice或者cpulimit是限制應用於一組程序,而不是僅應用於一個程序。此外,nice或cpulimit僅限制程序的CPU使用率,而cgroup可以限制其他程序資源。
通過明智地使用cgroup,可以控制伺服器的整個子系統的資源。例如,在為大規模伺服器部署而設計的最小Linux發行版CoreOS中,升級過程由cgroup控制。這意味著下載和安裝系統更新不會影響系統性能。