
私は 2 つの異なる PC 構成で Debian 8 Linux ディストリビューションを使用しています。以下で最初に目にする構成は、私が長い間使用している構成です。この構成ではピーク時に CPU を 100% 使用するため、はるかに高いスペックの新しい PC を購入することにしました。私は 10 年以上前にリリースされた samp03svr という古い 32 ビット Linux アプリを実行しています。これはシングル スレッド アプリなので、高周波数 CPU のみを検索しました。Xeon プロセッサは役に立ちませんでした。アプリにはコア数よりも高い CPU 周波数が必要です。
私の PC の構成は次のとおりです。
古い構成 マザーボード: 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 です。値が大きいほど、優先度は低くなります。「プロセスの nice 度が高いほど、他のプロセスに 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)
もう 1 つのオプションは、 というツールを使用することですcpulimit
。このツールを使用すると、プログラムを実行し、許可する CPU の最大パーセンテージを定義できます。
#install the package
apt-get install cpulimit
#run your program, for example limiting to 25%
cpulimit -l 25 /path/to/your/program