
我想將進程的 CPU 使用率限制在 10%。
實現此目的的一種方法是每分鐘連續運行該進程 6 秒,並在其餘時間暫停。
我不想用nice來改變進程優先權。
答案1
CPU限制(較新的github 連結在這裡)似乎是完成這項工作的工具 - 它允許您透過 PID、進程名稱或絕對位置控制進程的處理器使用情況,並以佔總數的百分比設定其處理器使用情況。
從 sourceforge 頁面的文件 -
使用範例
依可執行檔名稱將進程「bigloop」限制為 40% CPU:
cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40
透過 PID 將進程限制為 55% CPU:
cpulimit --pid 2960 --limit 55
透過命令列啟動進程並將其限制為 40%(僅限開發版本!):
cpulimit --limit 40 /etc/rc.d/rc.boinc start
Cyberciti.biz 有一個如何這也顯示您也許可以使用
-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.
而不是--exe等。
對於多處理器,您應該根據 100 * 核心數設定百分比 - 因此雙系統可以允許高達 150 的百分比,四核心可以允許高達 200
答案2
由於您沒有指定您的作業系統,因此我將在這裡添加一個用於 Windows 的選項和另一個用於 Linux 的選項:
對於Linux:
使用壓力:
stress 是 POSIX 系統的一個刻意簡單的工作負載產生器。它對系統施加可配置數量的 CPU、記憶體、I/O 和磁碟壓力。它是用 C 語言編寫的,是根據 GPLv2 許可的自由軟體。
以下是一個呼叫範例:透過指定 2 個 CPU 密集型進程、1 個 I/O 密集型進程和 1 個記憶體分配器進程,對系統施加 4 的平均負載。
$ stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose
stress: info: [9372] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd
stress: dbug: [9372] (243) using backoff sleep of 12000us
stress: dbug: [9372] (262) setting timeout to 10s
stress: dbug: [9372] (285) --> hogcpu worker 9373 forked
stress: dbug: [9372] (305) --> hogio worker 9374 forked
stress: dbug: [9372] (325) --> hogvm worker 9375 forked
stress: dbug: [9372] (243) using backoff sleep of 3000us
stress: dbug: [9372] (262) setting timeout to 10s
stress: dbug: [9372] (285) --> hogcpu worker 9376 forked
stress: dbug: [9375] (466) hogvm worker malloced 134217728 bytes
stress: dbug: [9372] (382) <-- worker 9374 signalled normally
stress: dbug: [9372] (382) <-- worker 9373 signalled normally
stress: dbug: [9372] (382) <-- worker 9375 signalled normally
stress: dbug: [9372] (382) <-- worker 9376 signalled normally
stress: info: [9372] successful run completed in 10s
對於 Windows:
使用BES – 戰鬥編碼器 Shirase 1.4.5 / 1.5.2:
控制每個進程 CPU 使用情況的免費軟體。 「主動」軟體 CPU 冷卻器。 BES 是一個小工具,可以限制您「目標」進程的 CPU 使用率:例如,您可以將使用 CPU 100% 的進程的 CPU 使用率限制為 50%(或您想要的任何百分比) 。這樣,您可以舒適地使用其他程序,同時在背景執行 CPU 密集型操作。
透過限制 CPU 負載,您也可以在 CPU 過熱時立即冷卻。它是一個「主動」軟體 CPU 冷卻器。傳統的軟冷卻器透過讓 CPU 在空閒時進入睡眠狀態來節省 CPU 能量。他們被動地等待,直到CPU空閒。 BES 更為激進:它透過減慢「加熱」過程來冷卻 CPU,即定期強制 CPU 短暫空閒。 (但是,如果您經常需要使用BES 來實現此目的,則應該安裝更好的硬體冷卻器。實際上,您應該嘗試的第一件事是清除散熱器周圍的灰塵(請參閱下文)。主動軟冷卻可能是一個有趣的技巧,但這畢竟只是一種解決方法,如果您的應用程式毫無意義地使用 CPU 100%,那麼讓 BES 來完成這項工作!
您也可以使用 Windows 命令行使其自動化:
以下命令列告訴 BES 監視 target.exe,並在 target.exe 開始運行時限制其 CPU 使用率,以便 target.exe 最多只允許使用 CPU(100 - 百分比)%:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
或者,您可以使用 1 到 99 之間的整數作為百分比。如果百分比被省略或無效,則自動使用 target.exe 最後已知的有效百分比(如果這是第一次定位 target.exe,則將應用預設減少 33%,除非指定百分比)。請注意,當從命令列啟動時,BES 將監視/限制目標,而不僅僅是限制它。
答案3
對於 Windows:(這只是@Diogo 答案的擴充。)
作為一個Windows 用戶,希望只需單擊一個快捷方式即可讓所需的目標程序自動以所需的CPU 速度運行,我發現它需要更多的步驟,涉及批處理文件,並且需要一些關於如何具體實作的說明建議命令列中的 [percentage] 和 [--minimize] 部分:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
我最終使用的方法如下。製作一個窗戶批次檔,使用文字編輯器建立一個檔案並將其命名為「[name].bat」(例如:something.bat)。在文件中鍵入以下內容:
@echo off
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"
在哪裡:
- 開始“”,允許貝斯和要運行的目標程序同時。
- 「C:\path\to\bes.exe」是引號內的 BES 程式的確切路徑,
- 「D:\path to\target.exe」是您要用來限制 CPU 的程式的確切路徑。在引號內,
- 90是減少的百分比,在本例中意味著將 CPU 限制減少到 100-90= 10%
- -m 是最小化啟動 BES 程式(根據 BES 說明:“--minimize 選項(簡稱 -m)告訴 BES 以最小化方式啟動(送到系統匣)。」
然後雙擊產生的 .bat 檔案將運行目標程序,同時使用 BES 自動將其調節到所需的 CPU 等級。