j'ai laissé la question de coté pendant quasiment 1 mois, j'ai enfin trouvé une librarie qui me semble efficace: Sigar.
Je décris la manière dont je m'y prends:
1- obtenir le PID de ma JVM:
pour l'instant, rien à voir avec Sigar:
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
//mx.getName() retourne "[pid]@nomDeLaMachine"
String name = mx.getName();
//on fait un split sur le nom pour extraire le pid et on parse en int
int pid = Integer.parseInt(name.split("@" )[0]);
2-On se sert de Sigar pour obtenir l'utilisation du proc pour ce pid:
//on cree une instance d'objet ProcCpu (un objet de la librairie Sigar)
ProcCpu procCpu =new ProcCpu();
//on cree une instance d'objet Sigar
Sigar sigar= new Sigar();
//on affiche ensuite périodiquement l'utilisation du cpu par ce processus
while(true){
Thread.sleep(1000);
procCpu.gather(sigar, pid);
System.out.println(procCpu.getSys()); //charge CPU system
System.out.println(procCpu.getTotal()); //charge CPU totale
System.out.println(procCpu.getPercent());//pourcentage de charge
}
Pour vérifier que ça me fournit bien des chiffres cohérents, j'ai utilisé Process Explorer (un utilitaire Windows qui permet d'avoir un aperçu détaillé de la charge du processeur). J'ai ensuite comparé les chiffres donnés par Process Explorer et les chiffres donnés par ce bout de code.
Au lieu de tracer sur le pid de la jvm courante, j'ai tracé sur le pid de mon firefox et j'ai pu constater que les résultats étaient fortement corrélés (ils ne peuvent pas être égaux étant donnés que les points de mesure ne peuvent pas se faire exactement au même moment)
Message édité par liouan le 16-06-2009 à 17:37:33