2011-06-23 3 views
0

Je connaisthreads Java surveillance profil mesure

http://download.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Je voudrais tester \ profil \ mesure combien de temps CPU fait le get fil. J'ai ajouté ce qui suit au mon constructeur de fil:

ManagementFactory.getThreadMXBean().setThreadCpuTimeEnabled(true); 
if(!ManagementFactory.getThreadMXBean().isCurrentThreadCpuTimeSupported()) 
    System.err.println("measure is not supported."); 
ManagementFactory.getThreadMXBean().setThreadContentionMonitoringEnabled(true); 
if(!ManagementFactory.getThreadMXBean().isCurrentThreadCpuTimeSupported()) 
    System.err.println("contention is not supported."); 

Puis, quand le fil a terminé son exécution, j'exécutais:

long tID = Thread.currentThread().getId(); 
long execTime = ManagementFactory.getThreadMXBean().getThreadCpuTime(tID); 

Mais pour la plupart de mes fils, que je suis ABSOLUMENT SÛR qu'ils occupent le processeur, j'ai le temps d'exécution de zéro (execTime == 0).

Comment mesurer mes threads? Quel pourrait être le problème dans la procédure ci-dessus?

Merci à l'avance.

+0

avez-vous confirmé via jconsole/visualvm? J'utilise la même chose que vous sans aucun problème, peut-être que c'est quand vous appelez la méthode? Si vous appelez le même via l'interface de jconsole mbean, vous devriez voir un nombre différent de zéro ... vous pouvez aussi essayer getThreadUserTime (id) – Toby

+0

@Toby, merci pour votre réponse. Pour la plupart des threads, je reçois une valeur nulle, pas pour tous; donc je suppose, j'appelle ces procédures au bon endroit dans mon code. Utiliser JConsole m'oblige à ne pas terminer le programme et à s'y connecter, mais le JConsole fournit une analyse aux threads qui sont dans le système (bloqués, en attente, en cours d'exécution) et non aux threads qui ont été terminés. La même idée est valable pour JVisualVM. – Syke

Répondre

0

Jetez un oeil à Thread Top, tout est fait, pas besoin de réinventer la roue.

+0

Je reçois mon ID de processus java à partir de Java VirtualVM (jvirtualvm) et j'exécute l'un des exemples sur le site Web ThreadTop, tout ce que je reçois est des exceptions. – Syke

+0

Il existe un autre projet similaire ici: https://bitbucket.org/sindrit/jtop/ – mindas

+0

essayez-vous de google pour moi ?! ou me fournir une résolution ?? – Syke