
我在 2 台不同的 PC 配置上使用 Debian 8 Linux 發行版。您會注意到下面的第一個配置是我使用了很長時間的配置。這種配置在高峰時段使用 100% cpu,因此我決定購買一台更高規格的新電腦。我正在運行一個 10 多年前推出的舊 32 位元 Linux 應用程序,名為 samp03svr。這是一個單線程應用程序,所以我只搜尋高頻CPU。至強處理器對我沒有幫助。該應用程式需要比核心數量更高的 CPU 頻率。
以下是我的電腦配置:
舊配置主機板:ASUS P8H61-M 處理器:Intel i5-3570 @ 3.4 GHz RAM:2x8GB Kingston 1333MHz
較新的配置主機板:B250M-D3H-CF處理器:i7-7700K CPU @ 4.20GHz RAM:2x8GB Kingston 2133MHz
我對新配置的期望是 CPU 使用率要低得多,但令人驚訝的是,這種情況並沒有發生。事實上,CPU 使用率比舊配置高出約 5 倍。我所做的測試是針對相同的工作負載、相同的作業系統和相同的驅動程式進行的。我什至嘗試禁用多線程,但 CPU 使用率沒有差異。
你會建議做什麼?
答案1
如果您的目標是滿足您提到的高峰時段的需求,我會考慮,如果可能的話,在您現在擁有的兩台機器上運行伺服器程序,並將它們放在負載平衡器後面,例如 haproxy。
另一方面,如果您的目標是減少伺服器程式的 CPU 消耗,那麼您有多種選擇。
您可以降低進程的優先權,以便核心以不佔用 CPU 的方式安排其 CPU 時間。這可以使用nice
或命令來完成renice
。在Debian上,優先權值範圍從-20到+19,預設值(不使用nice啟動流程)為0。如果您將其視為“進程越好,它就越願意將 CPU 時間交給其他進程”,那麼就很容易記住。
使用不同的 Niceness 值啟動您的程式:
nice -n +12 /path/to/your/program
如果你的程式已經在運行,你可以使用renice
它的 pid:
#first find the pid
pgrep your_program_name
#or
ps aux | grep your_program_name
#now use the pid here
renice -n +12 pid_of_your_program
#or if you are comfortable combining these
renice -n +12 $(pgrep your_program_name)
另一個選擇是使用名為 的工具cpulimit
。它允許您運行程式並定義您想要允許的 CPU 最大百分比。
#install the package
apt-get install cpulimit
#run your program, for example limiting to 25%
cpulimit -l 25 /path/to/your/program