服务器线程高占用定位方法
要定位服务器上线程占用高的代码,可以通过以下步骤使用命令行工具分析:
- 找到高CPU占用的Java进程
top -c # 按Shift+P按CPU排序,记录Java进程PID - 查看进程内的线程占用
top -H -p # 按Shift+P排序,记录高CPU线程的十进制TID - 将TID转为十六进制
printf “%x\n” # 得到十六进制NID(用于匹配jstack) - 捕获线程堆栈
jstack -l > jstack.log # 生成线程快照 - 定位问题线程
在jstack.log中搜索NID:
grep -A 20 jstack.log # 查看该线程的堆栈 - 分析堆栈
检查线程状态和调用栈:
- RUNNABLE 状态:表示正在消耗CPU
- BLOCKED/WAITING:可能因锁竞争导致资源等待
替代工具(更高效)
🔥 使用 arthas (推荐)
启动Arthas
java -jar arthas-boot.jar
1. 查看实时线程排名
thread
2. 检查具体线程堆栈
thread <线程ID>
3. 自动定位CPU前N线程
thread -n 3
输出示例:
“Thread-0” Id=1 RUNNABLE
at com.example.LoopTask.run(LoopTask.java:15)
🔥 使用 jcmd
jcmd Thread.print > threads.txt # 导出所有线程

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



