Windows服務器限制進程CPU使用率

在Windows server 2012 之前的服務系統 2008和2008 R2中有系統資源管理器System Resource Manager可以管理系統的CPU和內存使用情況。特別對於一些自己開發的有瑕疵的程序可以限制它對系統資源的佔用,同時又可以保整系統以及其它程序可以正常運行。這個功能本意是爲了終端服務使用的,避免某個用戶佔用過多的系統資源而對其它用戶造成影響。但確實也可以根據Equal_Per_Process的策略來達到限制進程對CPU的過分佔用。不過這個功能從2012版本的Windows服務器系統中被削減了。

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831568(v=ws.11)?redirectedfrom=MSDN

對於目前2019,2016的系統如何限制進程對CPU的過分佔用呢?我們可以換個思路。當前服務器都是多CPU,多CPU核心的。Windows系統可以讓特定的進程只能在某個或者某幾個CPU核心上運行,從而達到保留部分系統資源,確保基本系統可以正常運行的目的。

先來看看應當如何設置。傳統的圖形界面中,在任務管理器中找到需要設置的進程,右擊選擇設置相關性Set affinity來選擇當前進程可以在哪些CPU上運行。https://blog.csdn.net/qishine/article/details/105315997

在系統啓動後,可以通過powershell命令來設置。get-process cmd | % { $_.ProcessorAffinity=0x7 }這個命令表示將所有的cmd進程限制在CPU0,1,2上運行。其中ProcessorAffinity後的參數是根據2進制掩碼來計算的。最低位代表CPU0。示例中的0x7轉換成2進制就是0111。如果需要讓程序在4個CPU上運行,那麼參數就是15或者0xF。如果需要程序運行在CPU0,1,3上那麼參數就是11或者0xB

看一下,我成功的將一臺有問題程序的Windows服務器的CPU限制在66%。這個服務器上有程序存在瑕疵,當一段時間後就會佔用100%CPU,之前都是通過重啓系統解決的。現在通過CPU相關性的設置,即使這個程序依然有問題,但是對系統CPU的佔用只能達到66%。當然,從根本上還是應該從應用程序上來解決這類問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章