jstack笔记
1.jstack 命令:jstack 是JDK自带的一个工具,可以打印Java进程的线程堆栈信息
举例:jstack <pid>
解释:<pid>是Java进程的进程ID,执行该命令后可以看到所有线程的堆栈信息,包括线程的状态、调用栈等
jps 命令(针对Java进程):jps 是JDK自带的一个工具,可以用来列出当前用户的所有Java进程及其PID
举例:jps -l
2.top 命令:top 是一个实时显示系统资源使用情况的工具,可以用来查看线程级别的资源占用
举例:top -H -p <pid>
解释:-H选项表示以线程模式显示,-p <pid>表示只显示指定进程的线程
3.ps 命令:ps 命令可以用来查看系统进程和线程的详细信息
举例:ps -T -p <pid>
解释 -T 选项表示显示线程,-p <pid> 表示指定进程ID,执行该命令后可以看到该进程中所有线程的详细信息
举例:ps -ef | grep java
解释:-ef 选项表示列出所有进程,grep java 用于过滤出包含 java 的行
举例:ps aux
解释:ps aux 和 ps -ef 都是列出当前进程的命令,但它们的输出格式略有不同
ps -eo pid,%cpu --sort=-%cpu | grep -v PID | head -n 1 | awk '{print $1}'
1. ps -eo pid,%cpu --sort=-%cpu
ps: 这是一个用于显示当前系统进程状态的命令
-e: 表示显示所有进程(包括其他用户的进程)
-o: 指定输出格式。-o pid,%cpu 表示输出两列:pid(进程 ID)和 %cpu(CPU 使用率)
--sort=-%cpu: 按照 %cpu 列进行排序,- 符号表示降序排序,即从高到低
这个命令会列出所有进程的 PID 和 CPU 使用率,并按照 CPU 使用率从高到低排序
2. grep -v PID
grep: 这是一个用于在文本中搜索匹配模式的命令
-v PID: -v 选项表示反向匹配,即排除包含 PID 的行。因为 ps 命令输出的第一行通常是列标题(例如 PID %CPU),所以使用 grep -v PID 来排除这一行
3. head -n 1
head: 这是一个用于显示文件或输入的前几行的命令
-n 1: 表示只显示第一行。
这个命令会从前面已经排序的进程列表中选择 CPU 使用率最高的进程,即列表中的第一行
4. awk '{print $1}'
awk: 是一个强大的文本处理工具,可以对文本进行复杂的操作。
'{print $1}': 表示只打印第一列,即 pid。
这个命令会提取出 CPU 使用率最高的进程的 PID
ps -T -p $TOP_PID -o tid,pid,%cpu | awk 'NR>1 {print $0}' | sort -k3,3nr | head -n 1 | awk '{print $1}'
这个命令的目的是找到指定进程(由 $TOP_PID 指定)中 CPU 使用率最高的线程,并输出该线程的 TID(线程 ID)
1. ps -T -p $TOP_PID -o tid,pid,%cpu
ps: 这是一个用于显示当前系统进程状态的命令。
-T: 表示显示指定进程的所有线程。
-p $TOP_PID: 指定要显示的进程 ID 为 $TOP_PID。
-o tid,pid,%cpu: 指定输出格式。-o tid,pid,%cpu 表示输出三列:tid(线程 ID)、pid(进程 ID)和 %cpu(CPU 使用率)。
这个命令会列出指定进程的所有线程的 TID、PID 和 CPU 使用率。
2. awk 'NR>1 {print $0}'
awk: 是一个强大的文本处理工具,可以对文本进行复杂的操作。
NR>1 {print $0}: NR 表示当前记录数,即行号。这个条件表示从第二行开始打印,即排除第一行的标题行。
这个命令会去掉 ps 命令输出的第一行标题。
3. sort -k3,3nr
sort: 这是一个用于对文本进行排序的命令。
-k3,3nr: -k 指定排序键,3,3 表示只对第三列进行排序,n 表示数字排序,r 表示降序。
这个命令会按照第三列(即 %cpu)从高到低进行排序。
4. head -n 1
head: 这是一个用于显示文件或输入的前几行的命令。
-n 1: 表示只显示第一行。
这个命令会从排序后的线程列表中选择 CPU 使用率最高的线程,即列表中的第一行。
5. awk '{print $1}'
awk: 再次使用 awk 来提取所需的信息。
{print $1}: 表示只打印第一列,即 tid。
这个命令会提取出 CPU 使用率最高的线程的 TID。
printf "0x%x" $TOP_THREAD
这个命令的目的是将变量 TOP_THREAD 的值转换为16进制格式,并使用 printf 命令输出
printf: 这是一个格式化的输出命令,类似于 echo,但提供了更多的格式化选项
"0x%x": 这是格式字符串,其中 %x 是用于表示无符号十六进制整数的格式 specifier。0x 是前缀,表示后面的数是十六进制的
$TOP_THREAD: 这是变量,包含要转换为十六进制的数值
定义输出文件路径:
OUTPUT_FILE=$(dirname "$0")/output.txt
$(dirname "$0") 获取脚本文件所在的目录。
output.txt 是输出文件的名称。
重定向输出:
"$OUTPUT_FILE" 2>&1
将标准输出(stdout)重定向到 output.txt。
2>&1 将标准错误(stderr)也重定向到 output.txt。
输出文件路径:
echo "Output has been written to: $OUTPUT_FILE"
在脚本末尾输出文件路径,方便用户知道输出文件的位置

浙公网安备 33010602011771号