深入解析jstack命令格式及常用参数:优化Java应用性能的关键步骤

2. 命令格式

深入解析jstack命令格式及常用参数:优化Java应用性能的关键步骤

jstack [选项] pid

jstack [选项] 可执行核心

jstack [选项] [服务器 ID@]远程主机名或 IP

常用参数说明

1)选项:

生成核心转储的可执行 Java 可执行文件。 (可能是产生核心转储的java可执行程序)

core 将打印信息的核心转储文件

远程主机名或 IP 远程调试服务的主机名或 IP

server-id 唯一id,如果一台主机上有多个远程调试服务

2)基本参数:

-F 当“jstack [-l] pid”不响应时强制打印堆栈信息。如果jstack直接没有响应,则用于强制jstack)。一般情况下没有必要使用它。

-l 长列表。打印有关锁的附加信息,例如属于 java.util.concurrent 的可拥有的同步器列表,这将导致 JVM 暂停的时间更长(可能会不同很多倍,例如普通的 jstack 可能需要几毫秒而 GC 则不会)不一样的是,加了-l就意味着将近一秒)。建议不要使用-l。一般情况下不需要使用

-m 打印Java和原生c/c++框架的所有堆栈信息。它可以打印 JVM 堆栈并显示 Native 堆栈帧。一般应用程序故障排除不需要它。

-h | -help 打印帮助信息

pid是需要打印配置信息的java进程ID,可以用jps查询。

线程转储分析工具:

3)使用栈的步骤

1、首先使用top命令查找消耗CPU较多的进程ID,假设是123。

2、执行top -p 123 单独监控进程。

3、在步骤2中的监控界面输入H即可获取当前进程下的所有线程信息。

4、找到CPU消耗特别高的线程号,假设是123

5、执行jstack 123456转储当前进程并输出所有线程信息。

6 将步骤4得到的线程号11354转换为十六进制0x7b

7 根据步骤6得到的0x7b,在步骤5的线程信息中查找对应的线程内容。

8 解读线程信息并定位具体代码位置

—————————————————

通过top命令定位到CPU占用率高的线程后,继续使用jstack pid命令查看当前java进程的堆栈状态。

jstack 命令生成的线程转储信息包含 JVM 中所有存活的线程。为了分析指定线程,必须找到对应线程的调用堆栈。应该如何找到呢?

top命令中已经获取了占用CPU资源较高的线程的pid,并将pid转换为16进制值。可以使用win10自带的计算器用程序员专用计算器转换为十六进制。

在thread dump中,每个线程都有一个nid,只要找到对应的nid即可;每隔一段时间再次执行stack命令,获取thread dump,并区分两次dump是否有差异。在nid=0x246c的线程调用栈中,发现该线程一直在执行JstackCase类第33行的calculate方法。得到这些信息后,就可以检查对应的代码是否有问题。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读