2009-06-04 12 views
0

Ich hatte vor einiger Zeit ein Problem bei der Verwendung von Solaris, dass ich die Anzahl der CPUs begrenzen wollte, die Java sehen konnte (die von Runtime.getRuntime().availableProcessors() zurückgegeben wurde. Ich dachte, ich hätte es und ich bekam Informationen für Linux und nahm es auf dem Glauben. Mir wurde gesagt, dass taskset mit der Anzahl der CPUs beschränken würde, die Java verwenden würde (was wahr ist, es tut), aber es ändert sich nicht, was von availableProcessors() zurückgegeben.Limit availableProcessors

ich habe gesucht ziemlich viel eine Möglichkeit zu finden, diesen availableProcessors() Rückgabewert zu ändern, und ich habe nichts gefunden, weiß jemand eine Möglichkeit, es zu begrenzen, oder warum taskset -c 0,1 java -cp ./ Test würde nicht funktionieren

Test.java

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

Prost

Antwort

0

nicht verwunderlich, dass taskset hier nicht funktionieren, da es ein Befehl ist, die Scheduler-Parameter setzt, während availableProcessors() hätte keinen Grund, den Scheduler abzufragen.

Beachten Sie, dass Taskset in Ihrem Beispiel nicht nur auf zwei Prozessoren beschränkt ist; Es beschränkt Sie auf zwei bestimmte Prozessoren (0 und 1).

Ich frage mich, ob Sie Crosscutting (AOP) oder Byte-Code-Generation verwenden können, um den Aufruf availableProcessors() zu umbrechen?