Linux 查看Java线程数
1. 使用jps命令
jps 是 Java Virtual Machine Process Status Tool 的缩写,它可以列出正在运行的Java进程的相关信息,包括进程ID和主类名等。我们可以使用 jps 命令来查看Java应用程序的进程ID,然后再使用其他命令查看该进程的线程数。
首先,我们需要在Linux终端中执行以下命令来查看Java进程的进程ID:
jps
1.上述命令将会输出所有正在运行的Java进程的相关信息,其中包括进程ID。我们需要找到我们要查看线程数的Java进程的进程ID,并记下来。
接下来,我们可以使用 ps 命令来查看指定进程的线程数。假设我们的Java进程ID为 12345,我们可以执行以下命令来查看该进程的线程数:
ps -T -p 12345 | wc -l
1.上述命令将输出该Java进程的线程数,使用 wc -l 命令来统计输出行数即可。
使用jstack命令
jstack 是一个用于生成Java虚拟机线程快照的命令行工具,它可以输出Java进程中所有线程的状态和调用堆栈信息。我们可以使用 jstack 命令来查看Java进程的线程数。
首先,我们需要在Linux终端中执行以下命令来生成Java进程的线程快照:
jstack <pid>
1.上述命令中的 是Java进程的进程ID。执行以上命令后,将会在终端中输出Java进程的线程快照信息。
接下来,我们可以使用以下命令来统计线程数:
jstack <pid> | grep "java.lang.Thread" | wc -l
1.上述命令将会输出Java进程的线程数,使用 grep 命令过滤出包含 “java.lang.Thread” 的行,并使用 wc -l 命令统计输出行数。
- 使用 jstack 命令 dump java进程状态
jstack [PID] > dump.txt
- 统计线程状态
grep java.lang.Thread.State dump.txt | awk '{print $2$3$4$5}' | sort | uniq -c
统计进程对应的线程数
- 统计进程对应的线程数:
jstack -l PID | grep "java.lang.Thread.State" | wc -l
统计 RUNNABLE (java线程将就绪(ready)和运行中(running)两种状态称为运行)的线程数:
jstack -l PID | grep "java.lang.Thread.State: RUNNABLE" | wc -l
- 统计 WAITING (进入该线程需要等待其他线程做出一些特定的动作(通知或者中断))的线程数:
jstack -l PID | grep "java.lang.Thread.State: WAITING" | wc -l
- 统计 TIMED_WAITING (等待超时)的线程数:
jstack -l PID | grep "java.lang.Thread.State: TIMED_WAITING" | wc -l
- 统计 BLOCKING (表示线程阻塞)的线程数:
jstack -l PID | grep "java.lang.Thread.State: BLOCKING" | wc -l
- 统计 死锁 的线程数:
jstack -l PID | grep "Java-level deadlock" | wc -l
使用Java程序获取线程数
除了使用命令行工具,我们还可以通过编写Java程序来获取Java进程的线程数。Java提供了 Thread 类来表示线程,我们可以通过 Thread 类的相关方法来获取线程信息。
以下是一个使用Java程序获取线程数的示例代码:
public class ThreadCount {
public static void main(String[] args) {
int threadCount = Thread.getAllStackTraces().keySet().size();
System.out.println("Thread count: " + threadCount);
}
}