Linuxサーバーでユーザーが現在使用しているCPUコアの数をbashで確認するにはどうすればよいですか。
かなりの量のバックグラウンドジョブをサーバーに送信しているので、自分が送信した実行中のジョブ(プロセス)が多すぎるかどうかを確認するためのbashスクリプトを記述して、他のジョブを許可する必要があります。ユーザーは自分の仕事に使用するのに十分なコアを持っています。私のジョブが現在使用しているコアの数を、どのbashコマンドで確認できるか知りたいのですが。
よろしくお願いします!
CPUごとにCPUの数coresを取得するには:
grep "^core id" /proc/cpuinfo | sort -u | wc -l
または(physicalCPUの数を取得するには:
grep "^physical id" /proc/cpuinfo | sort -u | wc -l
それが役立つかどうかはわかりませんが、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の0
、1
、6
が他のCPUよりも多くの作業を行っていることがわかります。単一のCPUが100%近く(または100%)であるのに、他のCPUが0である場合があります。これは、シングルスレッドで、一度に1つのCPUしか使用できないプログラム(またはプログラムの一部)のインジケータになることがあります。
Fedora、RHEL、またはCentOSシステムにmpstat
をインストールするには、yum install sysstat
を使用します。
したがって、コアがどのように利用されているかを示す応答がここにあることがわかります。
ただし、これは実際にサービスを提供するものではありません。あなたは、あなたの仕事がコアのいくつかのサブセットに自分自身をグループ化する傾向があるというだけの根拠がないという基本的な仮定をしました。
代わりに、何らかの形でそれらを「固定」するものを実装しない限り、ジョブはすべてのコアに分散されます。 (注:私はそれをお勧めしません。「とくに」でないとだけ言ってください)
代替戦略は次のとおりです。特定のシステムで、他のユーザーがジョブを追加するのに「許容できる」と感じたときのLOADレベルを特定します。次に、負荷レベルがその制限を下回ったときにのみ新しいバックグラウンドジョブを送信するものをビルドします。
このようにして、ソリューションはコア数に依存せず、移植性が高く、柔軟性が高く、「調整」も簡単になります。
LinuxとOS Xで機能するようにこれを行う場合は、次のようにできます。
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
明示的に構成しない(つまり、プロセスを特定のCPUに固定する)場合を除き、すべてのコアは常に使用中であると見なすことができます。スケジューラは、次に利用可能なコアにプロセスを割り当てます。適例なのは、「システムモニター」(GNOMEの一部)が私のマシンの4つのコアすべてでほぼ同じ負荷を示していることです。
top
を実行し、「U
」を押してユーザー名を指定し、上位のいくつかのプロセスのCPU使用率を合計すると、概算を取得できます。