jstack跟踪Java堆栈信息
2022/5/26 1:51:21
本文主要是介绍jstack跟踪Java堆栈信息,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、简介
jstack(Java Virtual Machine Stack Trace)是JDK提供的一个可以生成Java虚拟机当前时刻的线程快照信息的命令行工具。线程快照一般被称为threaddump或者javacore文件,是当前Java虚拟机中每个线程正在执行的Java线程、虚拟机内部线程和可选的本地方法堆栈帧的集合。对于每个方法栈帧,将会显示完整的类名、方法名、字节码索引(bytecode index,BCI)和行号。生成的线程快照可以用于定位线程出现长时间停顿的原因,比如:线程间死锁、死循环、请求外部资源被长时间挂起等等。
2、jstack命令参数
命令语法:
jstack [options] pid
命令参数说明:
option
:jstack命令的可选参数。如果没有指定这个参数,jstack命令会显示Java虚拟机当前时刻的线程快照信息,如下图
-F参数
如果Java虚拟机进程由于进程挂起而没有任何响应,那么可以使用-F
参数(仅在Oracle Solaris和Linux操作系统上游戏)强制显示线程快照信息。
-l参数
如果使用-l
参数,除了方法栈帧以外,jstack命令还会显示关于锁的附加信息,比如属于java.util.concurrent的ownable synchronizers列表。
-m参数
如果使用-m
参数,jstack命令将显示混合的栈帧信息,除了Java方法栈帧以外,还有本地方法栈帧。本地方法栈帧是C或C++编写的虚拟机代码或JNI/native代码。
3、jstack 分析 CPU 问题
top -Hp pid来找到 CPU 使用率比较高的一些线程
将排在前面的线程 PID 转换成十六进制
printf ‘%x\n’ pid得到 nid
打印 Java 线程栈的信息
jstack pid |grep ‘nid’ -C5 –color
jstack 24076| grep 5e0d -A30
- 2838:java 进程
- 12c8:线程十六进制
- -A30:打印 30 行
- 包含:包名、类名、代码行信息,可以快速定位到某行代码导致该线程 CPU 使用率过高
- jstack:JDK 自带命令
当然更常见的是我们对整个 jstack 文件进行分析,通常我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED 就不用说了。我们可以使用命令
cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c
这篇关于jstack跟踪Java堆栈信息的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-20测试人员都是画画大神,让我看看谁还不会用代码图?
- 2024-05-20年薪百万的程序员都在用的摸鱼方式……
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了