Centos

將程序限制為不超過 CPU 使用率的 10%

  • December 20, 2019

我操作的 Linux 系統有很多使用者,但有時會出現濫用情況;使用者可能會執行一個佔用超過 80% 的 CPU/記憶體的程序。

那麼有沒有辦法通過限制程序可以使用的 CPU 使用量(例如 10%)來防止這種情況發生?我知道cpulimit,但不幸的是,它將限制應用於我指示它限制的程序(例如單個程序)。所以我的問題是,我怎樣才能將限制應用於所有正在執行的程序和將在未來執行的程序,而不需要提供它們的 id/路徑?

雖然它可能是對記憶體的濫用,但它不是 CPU:當 CPU 空閒時,正在執行的程序(通過“執行”,我的意思是程序沒有等待 I/O 或其他東西)將佔用預設情況下 100% CPU 時間。而且沒有理由強制執行限制。

現在,您可以設置優先級,這要歸功於nice. 如果您希望它們應用於給定使用者的所有程序,您只需要確保他的登錄 shell 執行nice:子程序將繼承該nice值。這取決於使用者如何登錄。例如,請參閱Prioritize ssh logins (nice)

或者,您可以設置虛擬機。實際上,設置每個程序的限制沒有多大意義,因為使用者可以啟動許多程序,從而濫用系統。對於虛擬機,所有限制對虛擬機都是全域的。

另一種解決方案是設置/etc/security/limits.conf限制;請參閱 limits.conf(5) 手冊頁。例如,您可以設置每次登錄的最大 CPU 時間和/或每次登錄的最大程序數。您也可以maxlogins為每個使用者設置為 1。

不錯/ renice

nice是對系統進行“一次性”調整的絕佳工具。

nice COMMAND

cpulimit

cpulimit如果您需要執行 CPU 密集型作業並且擁有空閒 CPU 時間對於系統的響應能力至關重要。

cpulimit -l 50 -- COMMAND

cgroups

cgroups將限制應用於一組流程,而不僅僅是一個流程

cgcreate -g cpu:/cpulimited
cgset -r cpu.shares=512 cpulimited
cgexec -g cpu:cpulimited COMMAND_1
cgexec -g cpu:cpulimited COMMAND_2
cgexec -g cpu:cpulimited COMMAND_3

資源

http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups

http://manpages.ubuntu.com/manpages/xenial/man1/cpulimit.1.html

引用自:https://unix.stackexchange.com/questions/151883