0

しばらく前に、Solarisを使用しているときに、Javaが認識できるCPUの数を制限したいという問題がありました(これはによって返されましたRuntime.getRuntime().availableProcessors()。私はそれを持っていると思い、Linuxに関する情報を与えられ、それを信頼しました。を使用tasksetすると、Javaが使用するCPUの数が制限される(これは本当です)が、によって返されるものは変更されないことを伝えましたavailableProcessors()

availableProcessors()この戻り値を変更する方法を見つけるためにかなり検索しましたが、何も見つかりませんでした。誰かがそれを制限する方法を知っていますか、またはなぜtaskset -c 0,1 java -cp ./ Testうまくいかないのですか?

Test.java

public class Test {
  public static void main(String args[]) {
    System.out.println(Runtime.getRuntime().availableProcessors());
  }
}

乾杯

4

1 に答える 1

-1

タスクセットがここで機能しないのは当然のことです。これはスケジューラーパラメーターを設定するコマンドであるのに対し、availableProcessors()にはスケジューラーを照会する理由がないためです。

あなたの例では、タスクセットは単に2つのプロセッサに制限されているのではないことに注意してください。2つの特定のプロセッサ(0と1)に制限されています。

クロスカッティング(AOP)またはバイトコード生成を使用して、availableProcessors()呼び出しをラップできるかどうか疑問に思います。

于 2009-06-04T23:56:33.113 に答える