服务器线程高占用定位方法

服务器线程高占用定位方法

要定位服务器上线程占用高的代码,可以通过以下步骤使用命令行工具分析:

  1. ​找到高CPU占用的Java进程​
    top -c # 按Shift+P按CPU排序,记录Java进程PID
  2. ​查看进程内的线程占用​
    top -H -p # 按Shift+P排序,记录高CPU线程的十进制TID
  3. ​将TID转为十六进制​
    printf “%x\n” # 得到十六进制NID(用于匹配jstack)
  4. ​捕获线程堆栈​
    jstack -l > jstack.log # 生成线程快照
  5. ​定位问题线程​
    在jstack.log中搜索NID:
    grep -A 20 jstack.log # 查看该线程的堆栈
  6. ​分析堆栈​
    检查线程状态和调用栈:
  • ​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 # 导出所有线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值