java阻塞线程或繁忙线程的定位方式

本文记录下java阻塞线程或繁忙线程的定位方式


测试或生产环境偶尔会遇到线程阻塞或cpu飙升的问题,我们经常使用以下工具进行定位和分析,对分析命令和需要注意的点进行记录。
1、arthas thread命令
2、jstack命令


一、arthas-thread命令

在这里插入图片描述

	// 找到当前持有锁,且阻塞最多线程的的线程
	thread -b
	// 打印最耗cpu的线程
	thread -n 3

二、jstack命令

在这里插入图片描述
分为以下几步:
1、top或jps命令查询进程id
2、top -Hp 命令查询到最繁忙的线程号
3、printf “%x” 线程号,得到十六进制线程号
4、jstack [进程号] | grep [十六进制线程号] -A 30 查询该线程堆栈信息前30行

为了方便,将以上命令合并为一条:

	// 'nid=0x' 使用其作为grep的关键字防止匹配到其他线程堆栈信息
	jstack 15 | grep `printf 'nid=0x%x' 220` -A 30
	// 另外,可以通过以下命令查询进程中最繁忙的线程
	ps -mp 15 -o THREAD,tid | sort -r | head -n 6

除此之外,在无法直接定位的情况,建议jstack 15 > stack.txt将所有堆栈dump到本地,使用文本工具进一步对比查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值