web-dev-qa-db-ja.com

Linuxサーバーで使用しているコアの数は?

Linuxサーバーでユーザーが現在使用しているCPUコアの数をbashで確認するにはどうすればよいですか。

かなりの量のバックグラウンドジョブをサーバーに送信しているので、自分が送信した実行中のジョブ(プロセス)が多すぎるかどうかを確認するためのbashスクリプトを記述して、他のジョブを許可する必要があります。ユーザーは自分の仕事に使用するのに十分なコアを持っています。私のジョブが現在使用しているコアの数を、どのbashコマンドで確認できるか知りたいのですが。

よろしくお願いします!

30
Tim

CPUごとにCPUの数coresを取得するには:

grep "^core id" /proc/cpuinfo | sort -u | wc -l

またはphysicalCPUの数を取得するには:

grep "^physical id" /proc/cpuinfo | sort -u | wc -l
39
Alix Axel

それが役立つかどうかはわかりませんが、mpstatユーティリティを使用して、個々のプロセッサ(またはコア)によるCPU使用率の内訳を取得できます。例えば:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %Nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

この例では、CPUの016が他のCPUよりも多くの作業を行っていることがわかります。単一のCPUが100%近く(または100%)であるのに、他のCPUが0である場合があります。これは、シングルスレッドで、一度に1つのCPUしか使用できないプログラム(またはプログラムの一部)のインジケータになることがあります。

Fedora、RHEL、またはCentOSシステムにmpstatをインストールするには、yum install sysstatを使用します。

26
Matt Solnit

したがって、コアがどのように利用されているかを示す応答がここにあることがわかります。

ただし、これは実際にサービスを提供するものではありません。あなたは、あなたの仕事がコアのいくつかのサブセットに自分自身をグループ化する傾向があるというだけの根拠がないという基本的な仮定をしました。

代わりに、何らかの形でそれらを「固定」するものを実装しない限り、ジョブはすべてのコアに分散されます。 (注:私はそれをお勧めしません。「とくに」でないとだけ言ってください)

代替戦略は次のとおりです。特定のシステムで、他のユーザーがジョブを追加するのに「許容できる」と感じたときのLOADレベルを特定します。次に、負荷レベルがその制限を下回ったときにのみ新しいバックグラウンドジョブを送信するものをビルドします。

このようにして、ソリューションはコア数に依存せず、移植性が高く、柔軟性が高く、「調整」も簡単になります。

2
pbr

LinuxとOS Xで機能するようにこれを行う場合は、次のようにできます。

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
2
tim_yates

明示的に構成しない(つまり、プロセスを特定のCPUに固定する)場合を除き、すべてのコアは常に使用中であると見なすことができます。スケジューラは、次に利用可能なコアにプロセスを割り当てます。適例なのは、「システムモニター」(GNOMEの一部)が私のマシンの4つのコアすべてでほぼ同じ負荷を示していることです。

2
EmmEff

topを実行し、「U」を押してユーザー名を指定し、上位のいくつかのプロセスのCPU使用率を合計すると、概算を取得できます。