2009-06-04 11 views
0

J'ai eu un problème il y a quelques temps en utilisant Solaris que je voulais limiter le nombre de processeurs que Java pouvait voir (cela a été retourné par Runtime.getRuntime().availableProcessors()) Je pensais l'avoir et on m'a donné quelques infos pour Linux sur la foi. on m'a dit que l'utilisation taskset limiterait le nombre de processeurs que java utiliserait (ce qui est vrai, il le fait), mais il ne change pas ce qui est retourné par availableProcessors().Limite availableProcessors

J'ai cherché un peu pour trouver un moyen de changer cette valeur de retour availableProcessors() et je n'ai pas réussi à trouver quelque chose. Est-ce que quelqu'un sait un moyen de le limiter ou pourquoi taskset -c 0,1 java -cp ./ Test ne fonctionnerait pas

Test.java

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

Vive

Répondre

0

Pas étonnant que taskset ne fonctionnera pas ici, car il est une commande qui définit les paramètres de planificateur, alors que availableProcessors() n'aurait pas de raison d'interroger le planificateur. Notez que dans votre exemple, taskset ne vous limite pas simplement à deux processeurs; il vous limite à deux processeurs spécifiques (0 et 1).

Je me demande si vous pouvez utiliser la génération de code (AOP) ou d'octets (crosscutting) pour envelopper l'appel de availableProcessors()?