88 Stimmen

Wie man die Anzahl der Threads in einem Java-Prozess ermittelt

Wie kann ich die Anzahl der Threads in einem Java-Prozess sehen?

11voto

Ravindra babu Punkte 45577

Ich habe ein Programm zur Iteration aller Threads erstellt und gedruckt getState() eines jeden 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();
        }
    }
}

Ausgabe:

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

Wenn Sie folgende Bedingung entfernen

if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup())

Sie erhalten in der Ausgabe auch die folgenden Threads, die vom System gestartet wurden.

Reference Handler, Signal Dispatcher,Attach Listener and Finalizer .

8voto

Alihossein shahabi Punkte 3548

Verwendung von Linux Top Befehl

top -H -p (process id)

Sie können die Prozess-ID eines Programms mit dieser Methode ermitteln:

ps aux | grep (your program name)

zum Beispiel :

ps aux | grep user.py

0 Stimmen

top -H -p `pgrep -u <userid here> <program name> `

2voto

Upul Bandara Punkte 5845
    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]);
          }
       }
   }

1voto

jpozorio Punkte 602

Anzahl der Threads mit jstack ermitteln

jstack <PID> | grep 'java.lang.Thread.State' | wc -l

Das Ergebnis des obigen Codes ist ganz anders als top -H -p <PID> o ps -o nlwp <PID> weil jstack nur Threads abruft, die von der Anwendung erstellt wurden.

Mit anderen Worten: jstack erhält keine GC-Threads

1voto

Nachiketa Punkte 1

Ein anderer Weg: Ermitteln Sie den Prozessnamen mit dem Befehl jps und verwenden Sie diesen in dem unten stehenden Skriptausschnitt:

# Get the process id
processPid=$(jps -l | grep "Process Name" | awk '{print $1}'); 
# Use process id to get number of threads using ps command 
ps -M $processPid| wc -l

Getestet unter macOS.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X