Java性能分析 - 通过top、jmap、jstack,快速分析JVM线程

本文介绍了如何使用top、jmap和jstack来快速分析Java应用程序中的线程死循环和挂起阻塞等问题。通过列出进程线程并按CPU排序,可以发现占用资源的线程。当线程间歇性休眠或阻塞时,可以使用jstack导出完整栈信息进行排查。重点关注BLOCKED线程,并对比栈文件以找出高频操作或阻塞逻辑。
摘要由CSDN通过智能技术生成

本文所述的方法操作简单,但要能快速定位问题,需要一些重复练习和实践。

排查线程死循环

思路

  • 通过top -H -p $pid列出进程的所有线程,默认是按cpu排序的(可按<或>调整排序字段,我常用的还有TIME+);如果有死循环线程,在未休眠或挂起的情况下(占用一核),将会显示在最上方

    在这里插入图片描述

  • 找到线程,通过jstack $pid | grep $thread_id -a30定位到堆栈

    注:jstack中记录的thread_id是16进制,top拿到的线程ID是10进制,grep时需自行转化在这里插入图片描述

编写脚本

##! /bin/bash
##! 查看某Java线程栈
##! @Ahthor: Will

## 声明提示配色
strong_tip="\033[44m\033[37m"
warn_tip=$strong_tip"\033[05m"
error_tip="\033[41m\033[37m"
tip_ending="\033[0m"

## 获取输入参数
pid=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值