JavaにRuntime.getRuntime().availableProcessors()
は、次のJavadocを持つメソッドがあります。
Java仮想マシンで使用可能なプロセッサの数を返します。この値は、仮想マシンの特定の呼び出し中に変更される場合があります。
値は実際にどのように変化しますか?たとえば、JVMで使用できるプロセッサは、物理的にインストールされているプロセッサよりも少ない状況でしょうか。
ジョナス
JavaにRuntime.getRuntime().availableProcessors()
は、次のJavadocを持つメソッドがあります。
Java仮想マシンで使用可能なプロセッサの数を返します。この値は、仮想マシンの特定の呼び出し中に変更される場合があります。
値は実際にどのように変化しますか?たとえば、JVMで使用できるプロセッサは、物理的にインストールされているプロセッサよりも少ない状況でしょうか。
ジョナス
Linuxコマンドtaskset(1)
を使用して、プロセスに特定のCPUまたは特定のCPUセットを使用させることができます。実行中のプログラムを変更して、1つ以上のプロセッサに強制するのは非常に簡単です。例えば、
taskset -p `pidof java` --cpu-list 0,5,7,9-11
Windowsでは、いくつかの単純なプロパティを使用して、アプリケーションが使用できるコアの数を変更できます。仮想化環境では、コアをVMに制限して、VMが認識しているコアのみが表示されるようにすることもできます。また、Linux / Unixでは、アプリケーションまたはユーザーがすべてのコアを使用できないようにコアアフィニティを設定できるため、JVMに表示されるよりも多くのコアがインストールされている可能性があります。
注:これは、リソースの競合を大きくしたくない、リソースをアンダープロビジョニング(またはオーバープロビジョニング)したい複数のジョブを実行しているマシンに役立ちます。
一部のハードウェア(サーバー)では、システムを再起動せずにプロセッサをホットスワップすることが可能です。これにより、プロセッサの数が変わる可能性があります。より一般的な原因は、システム管理者がプロセッサのスケジューリングポリシーを変更した場合です。
javaコマンドのオプションを使用して、Javaアプリケーションで使用可能なリソースをカスタマイズできます。私は実際にスイッチの正確な名前を知りませんが、あなたはたくさんのものをカスタマイズすることができます。
JVMのインスタンスに与えるプロセッサを減らすのはなぜですか?場合によります!トムキャットをホストしていて、顧客が利用できるリソースを配布したい場合があります。
お役に立てれば。