題:
我可以手動限制進程使用的%CPU嗎?
Pietro
2011-09-14 14:49:49 UTC
view on stackexchange narkive permalink

我想限制專用於某些進程(例如Firefox,Safari等)的CPU時間。

我什至不理解為什麼這樣的程序,即使不使用也是如此(沒有加載,沒有動畫,在後台運行,...),非常耗資源。為什麼瀏覽器必須佔用我50%或更多的CPU?我可以限制為10%嗎?

十二 答案:
fny
2012-05-05 08:37:37 UTC
view on stackexchange narkive permalink

cputhrottle 是您需要的工具。您可以使用 Homebrew安裝它。

您可以通過運行以下Bash腳本來按名稱監視一系列進程。我不太確定如何將其轉換為登錄項,因為 cputhrottle 需要超級用戶權限。在Automator工作流程中,將其作為腳本運行,無論如何:

  ##從Activity Monitor獲取流程/應用程序名稱並將其放在此處apps =(“ AppOne”“ AppTwo”“ AppThree”)#在true時在此處設置各自的限制limits = {30 40 50);在$ {apps}中為app做;為$ {limits}做限制;為$(pgrep $ {app})中的pid做;做sudo / path / to / cputhrottle $ {pid} $ {limit}做完donedone  

[編輯]

我為此腳本添加了其他版本(一個 bash 腳本),對於那些希望限制多個應用程序的CPU的人可能有用。

此新腳本還允許您指定一個包含應用程序名稱和名稱的列表。

主要區別是您可以為每個應用程序添加cpu限制,並且每個應用程序只能運行一次。我還添加了用於殺死所有 cputhrottle 進程的選項。

腳本假定 cputhrottle pidof 都是

 #!/ bin / bashif [[$ EUID > 0]];然後回顯“請以root / sudo身份運行此腳本”退出1fi#將--kill作為參數殺死所有正在運行的cputhrottlesif [$ 1 =“ --kill”];然後在$ {pids}中回顯“正在運行cputhrottles ...” pids =`pidof cputhrottle`;執行echo“ > Killing PID $ {pid}” sudo kill $ {pid}完成echo“完成!”退出0 'webstorm; 40'applications [4] ='Safari; 35'for i in“ $ {applications [@]}” ;;做app =($ {i //; /})app_name = $ {app [0]} cpu_limit = $ {app [1]}
printf“ \ n正在尋找$ {app_name} ... \ n” pids =`pidof $ {app}`為$ {pids}中的pid;做echo“ > PID = $ {pid},CPU = $ {cpu_limit}” sudo cputhrottle $ {pid} $ {cpu_limit} & donedoneprintf“ \ nDone!\ n” echo“運行此腳本,將'--kill'作為參數刪除所有cputhrottles。”  

來源:

[正如另一條評論中指出的那樣](https://apple.stackexchange.com/a/305848/116011),`cputhrottle`的論壇已於2019年2月17日從Homebrew移除,因為[它不再起作用了](https://github.com/Homebrew/homebrew-core/pull/36127)。優勝美地是macOS支持cputhrottle的最新版本。
現在,@Casimir應該怎麼做?
@PeterSamokhin對不起,我沒有其他選擇。但是我最近也沒有搜索過。
只需使用Apppolice:https://github.com/AppPolice/AppPolice/releases不確定Apppolice使用的終端命令是什麼,但是源代碼可用。
Nicholas Smith
2011-09-14 15:15:21 UTC
view on stackexchange narkive permalink

您確實可以! 有CPUThrottle,它允許指定要限制的PID。

請注意,由於某種原因,他們正試圖大量使用它,這是一個有用的工具,但是它是否會使您每天都會發現對您來說好還是壞。

有趣。但是,使用該實用程序,我必須啟動一個程序,找到其PID,然後手動使用cputhrottle。每次啟動它時,是否有什麼可以告訴系統的:“從今天開始,始終以最多25%的CPU運行此程序”?
據我所知,我只遇到過CPUThrottle。
404找不到文件
mike
2014-08-10 12:25:12 UTC
view on stackexchange narkive permalink

儘管不是OP問題的直接答案,但是如果您遇到特定進程的問題,該進程佔用了過多的CPU時間,並使計算機無法使用,並且您不介意該進程花費了多長時間要完成正在執行的任務,可以使用 renice 更改該進程的優先級,使其表現良好(因此得名)。

首先,您需要找到正在消耗CPU資源的進程的PID。您可以在活動監視器中或使用 ps 命令在Terminal.app中執行此操作-例如要查找Safari瀏覽器的PID,請輸入:

  MacBook:〜ps -ef | grep Safari 501 17452 263 0 11:36 pm ?? 4:15.60 /Applications/Safari.app/Contents/MacOS/Safari 

上面的第二行是輸出,在這種情況下,PID為17452。

然後,下一個任務是更改進程的優先級(假設我們要使Safari表現良好)。為此,請在Terminal.app中輸入:

  MacBook:〜renice -n 10 -p 17452  

-n 選項通過將當前值加10(默認為0)來更改精確級別。值的範圍是-20到20,最小值表示最高優先級。作為普通用戶,您可以使用0到20的值。要分配負值,您需要具有root用戶特權(例如,使用 sudo 命令)。在Terminal.app中鍵入 man nice man renice ,了解有關 nice renice 的更多信息。

nice renice 本身並不限制可用於給定應用程序的CPU的百分比,但是它們確實允許更改調度優先級,或者話說一個進程將獲得多少CPU時間。這都是與系統上的CPU負載有關的,因此,如果系統未充分利用,您很可能看不到任何區別。

有沒有辦法查看流程的當前優先級?
使用top或htop查看進程的當前值。(brew install htop),(sudo apt安裝htop)。您將看到包含該值的列之一。
Noam
2014-08-10 10:02:33 UTC
view on stackexchange narkive permalink

這不完全是您想要的,但就Google驅動器和Chrome而言,這對我有什麼幫助:

Google驅動器(“備份和同步”)

  • 取消優先級:

     ,用於$ {做renice +20 -p $ f;完成 
  • 設置回正常:

     在$(pgrep'Backup and Sync'; pgrep'FinderSyncAPIExtension' );做renice 0 -p $ f;已完成 

Chrome

  • 取消對當前所有進程的優先級:在$ {pgrep'Chrome')中為f的p>

     ;做renice +20 -p $ f;完成 
  • 設置為所有當前當前進程正常:

      for $(pgrep'Chrome')中的f;做renice 0 -p $ f;完成 
John Wells
2014-07-10 20:33:42 UTC
view on stackexchange narkive permalink

尼古拉斯·史密斯(Nicholas Smith)發布的鏈接不再起作用。因此,我發現了另一個應用程序,該應用程序可以為再次搜索該應用程序的人們提供幫助。該應用程序將調用Apppolice。

http://www.macupdate.com/app/mac/49836/apppolice

與AppPolice類似,有AppTamer(http://stclairsw.com/AppTamer/)。一個警告:在我撰寫此評論時,AppTamer尚未與OSX Sierra兼容。
哦,我的天哪。剛剛安裝了AppTamer。高興地報告了出色的作品。當我按住Alt鍵跳出時,可以使用它來使新的《星際爭霸》保持原樣。哦,我忘了提,我正在運行macOS Sierra 10.12.6。謝謝你的建議!
定位已停止。
但是仍然可以正常工作。
我可以確認AppPolice在10.15.1上正常工作
與AppTimer不同,AppPolice也完全免費,可在macOS Catalina上運行。
輝煌的發現。與花哨的AppTamer相比,Apppolice的複雜度要低得多(因此也更容易出現問題)。這是我的迷你評論:在GitHub上找到此版本,已安裝,將Lightroom Classic限制為1600%,其CPU使用率立即從2200%下降到1473%。當Lightroom導入150,000張照片時,讓我的計算機恢復工作。我認為這對於DaVinci Resolve渲染也非常有用。如此簡單易用。輝煌。PS。通常,我不使用Lightroom,而是使用FastRawViewer和DxO PhotoLab,但需要所有東西的目錄才能合併一些硬盤。
Yuriy Nasretdinov
2017-09-20 13:38:01 UTC
view on stackexchange narkive permalink

有一個簡單的單行代碼可以完成所有操作:

  ps axu |grep鉻|grep -v grep |awk'{print $ 2}'|sudo xargs -n 1 -I'{}'sh -c'cputhrottle {} 10 &'
 

輸入您的應用名稱(而不是Chromium)和所需的百分比(而不是10),就可以了!

效果很好,儘管可以簡化為:pgrep Dropbox |sudo xargs -n 1 -I'{}'sh -c'cputhrottle {} 10&'`。不過,我不確定macOS是否裝有`pgrep`。
`cputhrottle`不再適用於10.14莫哈韋沙漠
`cputhrottle`可以在10.15上運行,所以如果不是在Mojave上可以運行,那可能就是現在。
user100375
2016-02-21 09:48:47 UTC
view on stackexchange narkive permalink

這是基於先前的答案,但是添加了ctrl + c的陷阱以確保被節流的進程保持在繼續狀態,並添加 set -e ,因此此腳本將退出如果進程本身退出,將完全清除:

 陷阱ctrl_c_fn INT

函數ctrl_c_fn(){
    迴聲“捕獲到CTRL-C,退出”
    殺死-SIGCONT $ pid
    出口
}

回顯“輸入進程ID”
讀pid
回顯“按Ctrl-C退出”

設置-e

雖然是真的做
    殺死-SIGSTOP $ pid
    睡眠0.009
    殺死-SIGCONT $ pid
    睡眠0.001
完成
 
Dmitriy Buldakov
2014-10-18 22:04:45 UTC
view on stackexchange narkive permalink

這對我有用

 回顯“輸入進程ID”,讀回顯為“按Ctrl-C退出”,但為true;殺死-SIGSTOP $ pid sleep 0.009殺死-SIGCONT $ pid sleep 0.001done  
Alejo JM
2016-05-06 11:52:16 UTC
view on stackexchange narkive permalink

這是我的最終腳本,請保持命令cputhrottle的清潔 僅在不存在的情況下執行新的操作

 #!/ bin / bash

###
#設置cputhrottle如果不存在
###
set_service_cpu_limit(){
    service_pid = $(pgrep $ 1)
    限額= $ 2
    如果[[!-z $ service_pid]];然後
        service_cpu = $(ps aux | grep“ sudo cputhrottle $ service_pid $ limit” | grep -v grep | wc -l)
        如果[[!$ service_cpu -gt 0]];然後
            sudo cputhrottle $ service_pid $ limit &
        科幻
    科幻
}

###
#主循環
###
雖然是真的做
    set_service_cpu_limit bzfilelist 2
    set_service_cpu_limit bztransmit 2
    睡0.5
完成
 
Bart Meerdink
2018-08-04 16:33:32 UTC
view on stackexchange narkive permalink

Dimitri編寫的腳本運行良好(在macOS上),但是在關閉應用程序後,該腳本始終運行並顯示錯誤。我對其進行了更改以使其完成(未找到有關PID的錯誤消息):

  echo“輸入進程ID”
讀pid
回顯“按Ctrl-C退出”

而殺死-SIGSTOP $ pid;做
    睡眠0.009
    殺死-SIGCONT $ pid
    睡眠0.001
做完了
 
為了改善該答案,這可能應該是對Dimitri的原始答案進行的編輯,而不是(基本上)具有相同信息的單獨答案。
hensti
2020-01-03 19:24:46 UTC
view on stackexchange narkive permalink

我使用 AppPolice。這有點不穩定和笨拙,但是由於沒有其他選擇,而且問題很小,我認為這是一個不錯的解決方案。在Catalina上工作。

除了還有其他選項,例如[AppTamer](https://www.stclairsoft.com/AppTamer/index.html)仍在開發中。
這對我有用
Lambo
2020-07-02 02:38:44 UTC
view on stackexchange narkive permalink
只要在可執行文件上簽名,

cputhrottle (請參閱fny和Nicholas Smith的答案)就可以在macOS 10.15上運行。

您可以按照此處列出的步驟簡單快速地進行操作: https://web.archive.org/web/20191223180139/https://sourceware.org/gdb/wiki/PermissionsDarwin

您可以在此處下載 cputhrottle http://www.willnolan.com/cputhrottle/cputhrottle.html

在哪裡可以找到“ cputhrottle”。並且最好包含鏈接的要點,因為它們經常過時,使答案無用
@Allan,謝謝。我添加了一些額外的鏈接。我本來會留下我的答案作為原本對其他答案的評論,但我的聲譽不高。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...