一定量の CPU を予約するには JVM が必要です。私の研究では、他のプロセスがそのCPUを使用しないようにtaskset
カーネルパラメータを使用して作業することができます。isolcpus=<CPU_ID>
いくつかの問題が発生します。
- プロセスを最初から再開する必要がありますか
taskset
? - 予約とは、プロセスがそのCPUでのみ実行でき、リソースに問題がある場合は別のCPUに拡張できることを意味しますか?
答え1
通常、これを使用してtaskset
プロセスの開始後にプロセスを制限します。以下を使用してpidof java
JavaアプリケーションのPIDを確認できますtaskset
。
$ taskset -p $(pidof java) --cpu-list 0-2,5
メモ:6つのCPUがある場合、0、1、2、5はJVM PIDの対応するCPUに好みを割り当てます。
好みは、他のプロセスがそのCPUを使用することを制限するものではなく、taskset
排他性を制限するのではなく、特定のプロセスを特定のCPUセットに制限するツールに近いです。
ワークセットは、指定されたPIDを持つ実行中のプロセスのCPUアフィニティを設定または取得するため、または指定されたCPUアフィニティを使用して新しいコマンドを開始するために使用されます。 CPU アフィニティは、プロセスをシステムの特定の CPU セットに「バインド」するスケジューラ属性です。 Linux スケジューラは指定された CPU アフィニティを尊重し、プロセスは他の CPU で実行されません。 Linuxスケジューラは自然なCPUの好みもサポートします。パフォーマンス上の理由から、スケジューラは可能な限りプロセスを同じ CPU に保持しようとします。したがって、特定のCPUの好みを強制することは、特定のアプリケーションでのみ有用です。
代替
この自己回答型U&Lクイズの質問は次のとおりです。cgroupを使用してホワイトリストを除くすべてのプロセスを単一のCPUに制限する方法は?これを行うためにcgroupを使用する方法を扱うトピックです。