Comment puis-je voir le nombre de threads dans un processus Java?
Outil utile pour déboguer Java, il donne le nombre de threads et d'autres informations pertinentes à leur sujet:
jconsole <process-id>
Java.lang.Thread.activeCount()
Il renverra le nombre de threads actifs dans le groupe de threads du thread actuel .
docs: http://docs.Oracle.com/javase/7/docs/api/Java/lang/Thread.html#activeCount ()
ManagementFactory.getThreadMXBean().getThreadCount()
ne se limite pas aux groupes de threads comme Thread.activeCount()
le fait.
Il existe une méthode statique sur la classe Thread
qui retournera le nombre de threads actifs contrôlés par la JVM:
Thread.activeCount()
Renvoie le nombre de threads actifs dans le groupe de threads du thread actuel.
De plus, les débogueurs externes doivent répertorier tous les threads actifs (et vous permettre de suspendre n'importe quel nombre d'entre eux) si vous souhaitez les surveiller en temps réel.
Solution générique qui ne nécessite pas d'interface graphique comme jconsole (ne fonctionne pas sur les terminaux distants), ps fonctionne pour les processus non Java, ne nécessite pas de JVM installée.
ps -o nlwp <pid>
J'ai écrit un programme pour répéter tout Threads
créé et imprimer getState()
de chaque Thread
import Java.util.Set;
public class ThreadStatus {
public static void main(String args[]) throws Exception{
for ( int i=0; i< 5; i++){
Thread t = new Thread(new MyThread());
t.setName("MyThread:"+i);
t.start();
}
int threadCount = 0;
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for ( Thread t : threadSet){
if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup()){
System.out.println("Thread :"+t+":"+"state:"+t.getState());
++threadCount;
}
}
System.out.println("Thread count started by Main thread:"+threadCount);
}
}
class MyThread implements Runnable{
public void run(){
try{
Thread.sleep(2000);
}catch(Exception err){
err.printStackTrace();
}
}
}
Sortie:
Java ThreadStatus
Thread :Thread[MyThread:0,5,main]:state:TIMED_WAITING
Thread :Thread[main,5,main]:state:RUNNABLE
Thread :Thread[MyThread:1,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:4,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:2,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:3,5,main]:state:TIMED_WAITING
Thread count started by Main thread:6
Si vous supprimez la condition ci-dessous
if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup())
Vous obtiendrez également ci-dessous les threads en sortie, qui ont été démarrés par le système.
Reference Handler, Signal Dispatcher,Attach Listener and Finalizer
.
Utilisation de la commande Linux Top
top -H -p (process id)
vous pouvez obtenir l'ID de processus d'un programme par cette méthode:
ps aux | grep (your program name)
par exemple :
ps aux | grep user.py
public class MainClass {
public static void main(String args[]) {
Thread t = Thread.currentThread();
t.setName("My Thread");
t.setPriority(1);
System.out.println("current thread: " + t);
int active = Thread.activeCount();
System.out.println("currently active threads: " + active);
Thread all[] = new Thread[active];
Thread.enumerate(all);
for (int i = 0; i < active; i++) {
System.out.println(i + ": " + all[i]);
}
}
}