运维-JVM监控之线程问题

本文介绍了使用jstack工具分析Java进程内线程状态的方法,包括通过`ps`获取PID,`top`找出高CPU占用线程,转换线程ID为十六进制,以及使用`jstack`查看特定线程的堆栈信息,帮助定位线程等待或阻塞的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jstack主要用来查看某个Java进程内的线程堆栈信息

1、ps -ef |grep 应用名称 --获取pid

2、top -Hp pid --找出该进程内最耗费CPU的线程

例:top -Hp 31385

 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                
31499 admin     20   0 3795904 591760  14224 S  0.3  3.7   1:12.22 java                                                                                                   
31385 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:00.00 java                                                                                                   
31388 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:19.00 java                                                                                                   
31389 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:01.29 java                                                                                                   
31390 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:01.31 java                                                                                                   
31391 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:02.11 java                                                                                                   
31392 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:00.02 java                                                                                                   
31393 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:00.04 java                                                                                                   
31394 admin     20   0 3795904 591760  14224 S  0.0  3.7   0:00.00 java                                                                                                   
31395 admin     20   0 3795904 591760  14224 S  0.0  3.7   1:09.64 java

TIME列就是各个Java线程耗费的CPU时间。

3、printf "%x\n" 线程id --将线程id转化为十六进制

例:printf "%x\n" 31499
       7b0b

4、jstack pid | grep 十六进制线程id --查询堆栈信息

例:jstack 31385|grep 7b0b
"MQ-AsyncArrayDispatcher-Thread-31385#-1244857759#-1596142409#9048915282620395" #72 daemon prio=5 os_prio=0 tid=0x00007f6c058ea800 nid=0x7b0b in Object.wait()  [0x00007f6be22a1000]

定位:线程名为MQ-AsyncArrayDispatcher-.....,wait()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值