[工具程式] cputhrottle限制單一程式的CPU用量 - iPhone4.TW

會員登入



顯示結果從 1 到 4 共計 4 條
  1. #1
    Hiraku 的頭像

    皮樂

    註冊日期:06-12-2008
    文章:13,852
    謝謝你: 561
    在 1,028篇文章中獲得 5,840個感謝
    有時候,我們在用電腦作一些比較耗資源的工作的時候,

    會發現有其他的背景程式佔用著CPU,而無法使得真正重要的工作使用更多的CPU,

    或者明明沒開幾個程式,但是CPU卻一直飆高,電腦溫度也一直在70、80度。



    在這種情況下,就是cputhrottle登場的時候了。

    以我今天的例子來說,我的Dropbox常常會吃70~90%的CPU,

    但是Dropbox並不是我目前急需使用的軟體,

    另一方面,我又不想關閉Dropbox,

    因此,這時候,我找到了cputhrottle,使得Dropbox的CPU用量下降。



    首先,我們到這裡下載cputhrottle的主程式

    (直接下載連結:cputhrottle.gz

    下載之後解壓縮,為了方便教學,這裡請大家直接把解開的cputhrottle放在桌面。


    之後開啟活動監視器(在應用程式 > 工具程式 底下),找到我們要降低CPU的程式,看到前面有一串數字,

    記住這個數字(PID)(這裡是Dropbox的28096)



    之後開啟終端機,輸入
    cd ~/Desktop
    chmod 755 ./cputhrottle (第一次使用才要輸入)
    sudo ./cputhrottle [PID] [CPU用量]
    chmod 只有第一次使用cputhrottle才要輸入,

    第三行的話,以Dropbox為例,我們的PID是28096,我想把CPU降為20%

    所以輸入
    sudo ./cputhrottle 28096 20
    按下Enter之後系統會要你輸入密碼,如果沒設定使用者密碼的人,要先設定才可以使用sudo的指令。


    這樣,Dropbox的CPU用量就會下降到20%以內了~

    不過我來補充一下原理,(我大概看看簡易說明的而已,有誤請指正)

    在Unix系統中,有個叫做SIGSTOP跟SIGCONT的指令,

    它可以使得一個程序暫停跟繼續執行,

    而這個CPU限制的原理就是,當該程式超過設定量的時候,就會被暫停,降低到設定量以內,再繼續執行。

    由於切換暫停跟繼續的速度算是蠻快的,所以感覺不大出來,

    不過皮樂還是不建議把這個方法用在重要的系統程序上面,以免造成系統不穩定。

    (但是系統程序中,mds跟mdsworker是Mac Spotlight用的,如果設定它們的CPU限制的話可能還好,有待勇者測試)


    另外,這個方法的缺點是,

    一旦程式關閉之後,PID一般來說就會改變,所以關閉之後再開就必須重新設定一次,

    (設定完畢之後終端機可以關閉沒關係,不影響)

    以上就是今天的分享,希望對大家有用






    同步自我的網站:http://hiraku.tw/2011/09/2751/
    此篇文章於 09-14-2011 23:03 被 Hiraku 編輯。


  2. #2

    海盜船長

    註冊日期:12-02-2008
    文章:2
    謝謝你: 0
    在 0篇文章中獲得 0個感謝
    sudo ./cputhrottle `ps -ef |grep Dropbox.app |grep -v grep | awk '{print $2}'` 20

    這樣試看看


  3. #3
    Hiraku 的頭像

    皮樂

    註冊日期:06-12-2008
    文章:13,852
    謝謝你: 561
    在 1,028篇文章中獲得 5,840個感謝
    引用 作者: topmat 查看文章
    sudo ./cputhrottle `ps -ef |grep Dropbox.app |grep -v grep | awk '{print $2}'` 20

    這樣試看看


    感謝,這樣看起來是可以針對軟體名稱而不必考慮PID了呢~~


  4. #4

    新生報到

    註冊日期:05-09-2011
    文章:1
    謝謝你: 0
    在 0篇文章中獲得 0個感謝
    你好! 本人照所說的方法去做, 但當按完[sudo]個行指令後, 卻出現command not found, 請問可以怎解決, 本人對於ternminal 指令係門外漢, 敬請賜教, 謝謝!


 

 

發文規則

  • 不可以發表新主題
  • 不可以發表回覆
  • 不可以上傳附件
  • 不可以編輯自己的文章
  •  
回到此頁頂端