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


30

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

私はかなりの量のバックグラウンドジョブをサーバーに送信しているので、送信された実行中のジョブ(プロセス)が多すぎる場合、ジョブを送信する前に確認するbashスクリプトを作成したいと思います。ユーザーは自分の仕事に使用するのに十分なコアを持っています。私は自分の仕事が現在使用しているコアの数を教えてくれるbashコマンドを知りたいです。

よろしくお願いします!

回答:


39

CPUあたりのCPU コアを取得するには:

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

または物理 CPUを取得するには:

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

特定のユーザーのこれを確認する方法は?
マキス

26

それが役立つかどうかはわかりませんが、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のを見ることができる01と、6それらの残りの部分よりも多くの作業を行っています。1つのCPUが100%に近い(または100%にある)一方で、他のCPUがゼロになっていることがあります。これは、シングルスレッドであり、一度に1つのCPUしか使用できないプログラム(またはプログラムの一部)のインジケータになります。

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


この答えを提供してくれてありがとう!私の同僚は、「トップ」コマンドを使用し、mpstatコマンドを表示するまで、プロセッサー使用率について間違った結論を出していました。
ナビゲーション

Ubuntuでは使用できません:# aptitude search mpstat #
アリックスアクセル

2
aptitude search systat代わりに@AlixAxelを試してください。
マットSolnit

@MattSolnit:まだ運がありません。
アリックスアクセル

mpstatはsysstat 、DebianおよびUbuntuのパッケージによって提供されます。ほとんどのDebian派生ディストリビューションは同じパッケージ名を使用すると予想されます。Debianから派生したディストリビューションでは、から始めapt-cache search --full mpstatます。
CVn

2

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


私はかなりの量のバックグラウンドジョブをサーバーに送信しているので、他のユーザーに送信を許可する必要があるため、実行中のジョブ(プロセス)が送信するジョブが多すぎる場合、ジョブを送信する前に確認するbashスクリプトを作成するのが好きです仕事に使用するのに十分なコア。そのため、現在bashコマンドでジョブが使用しているコアの数を知ることができます。
ティム

3
あなたが私の答えを理解したとは思わない。使用中のコアの数は、常に利用可能なコアの総数です。システム全体の負荷を要因として使用して、ジョブの送信を制限するかどうかを決定します。
-EmmEff

ありがとうございました!システム全体の負荷を確認します。同僚の誰かから、すべてのコアを使い果たすことはできないと言われました。他の人がすぐに仕事を実行し、私の仕事がかなり長く続くことを知っている人がいるからです。また、使用しているコアを制限する必要があると思いますか?
ティム

2

そのため、コアがどのように使用されているかを示す応答がここに表示されます。

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

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

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

そうすれば、ソリューションはコア数に依存せず、よりポータブルで、より柔軟になり、「微調整」も簡単になります。


私は今、あなたが別のポスターの回答に追加したコメントに気付きました。これは、同僚があなたに言ったことのせいだということを示しています。ですから、実際、誤解は彼のものであり、あなたのものではないようです。ごめんなさい!
pbr 2009年

ありがとうございました!「特定のシステムについて、他のユーザーがジョブを追加することを「許容できる」と感じたときのLOADレベルを特定する」に関して、現在の負荷が主に実行中のジョブによって引き起こされていない場合は、もっと自由に使用できます残りのCPUですが、現在の負荷で実行中のジョブがかなりの量を要する場合、おそらく残りのCPUの使用をあきらめなければなりません。実行中のジョブの合計のCPU使用率を見積もる必要はないと思いますか?
ティム

いいえ、現在の負荷があなたの仕事と他の仕事からどれだけであるかを区別することは本当に理にかなっているとは思いません。シンプルさを考慮してください。あなたの仕事は善良な市民になろうとし、負荷が許容できるレベルを下回った場合にのみ自分自身を提出します。アイデアは、残りの容量をすべて利用することではありません。他の将来のユーザーはバインドされたままになります。理想的には、すべてのユーザーがこのために同じロジックを使用します。
PBR

2

LinuxおよびOS Xで動作するようにこれを行うには、次のようにします。

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

1

実行しtop、「U」を押してユーザー名を指定し、上位のいくつかのプロセスのCPU使用率を合計することにより、大まかな見積もりを取得できます。


bashスクリプトで使用したいので、番号を教えてくれるbashコマンドを知りたいです。
ティム

@Tim topは、-bスイッチを使用してバッチモードで実行できます。-nスイッチと組み合わせて、必要な反復回数を取得します。
nagul

1
ユーザーが送信するすべてのジョブ(プロセス)で使用されるコアの数を取得するためのコードの例を教えてください。
ティム

@Timすぐに使えます。top出力を解析してこのようなスクリプトを作成するか、Googleが誰かが既にそれを行ったかどうかを確認する必要があります。ただし、コンテキストの切り替えが発生する速度を考えると、実行ごとに異なる出力が得られると思うので、努力する価値があるとは思いません。システムの負荷は十分な指標ではありませんか?プロセスキュー(CPUで待機しているプロセス)の処理に必要な仮想コアの数を効果的に示します。
-nagul

@ nagul:はい、システムの負荷は良好です。私も確認しています。しかし、一部の人々は私がすべてのコアを使い果たすことはできないと私に言い続けています。したがって、使用するコアを制限する必要があると思います。ところで、CPUとメモリの負荷を確認し、使用量に基づいてジョブを動的に送信するオンラインスクリプトをどこかで見ましたか?私は長い間探していました。ありがとう!
ティム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.