linux查看java堆栈信息_Java运行状态分析2:获取线程堆栈信息

当Java应用出现内存泄漏或运行缓慢时,可以通过分析JVM内存和线程堆栈来排查问题。本文介绍了如何在Linux环境下查看当前线程数量、使用`jstack`命令生成线程堆栈,以及如何处理高CPU负载的线程。此外,还提到了通过`actuator`接口获取线程和内存信息的方法。
摘要由CSDN通过智能技术生成

Java运行状态分析2:获取线程堆栈信息

基本概念

出现内存泄漏或者运行缓慢场景,有时候无法直接从业务日志看出问题时候,需要分析jvm内存和线程堆栈

线程堆栈信息主要记录jvm线程在某时刻线程执行情况,分析线程状态可以跟踪到程序出问题的地方

内存堆栈信息主要记录jvm堆中在某时刻对象使用情况,主要用于跟踪是哪个对象占用了太多的空间,从而跟踪导致内存泄漏的地方

跟踪线程信息

查看当前线程数量

actuator

1.x

http://host:port/metrics/threads //当前进程的线程数

http://host:port/metrics/threads.daemon //当前进程后台驻留线程数

http://host:port/metrics/threads.peak //当前进程线程数峰值

2.x

http://host:port/actuator/metrics/jvm.threads.daemon //当前进程后台驻留线程数

http://host:port/actuator/metrics/jvm.threads.live //当前进程的线程数

http://host:port/actuator/metrics/jvm.threads.peak //当前进程线程数峰值

sop hystrix 线程状态

http://host:port/sys/hystrix/threads

linux

ps huH p {pid}|wc -l

jstack生成线程堆栈

当服务cup飙升或者出问题需要从主机层面定位时候,使用top -c 命令查看对应哪个进程占用了过高资源

66baba4344b9214d420227fcb9c6d3c5.png

找到资源占用高的进程

明确需要定位的进程通过如下命令找到对应的进程id

ps aux|grep {application alias}

接下来通过jstack导出对应的线程堆栈

jstack 对应参数如下

-m to print both java and native frames (mixed mode)

-l long listing. Prints additional information about locks

可以通过如下命令定位具体高load线程:

查询进程具体哪个线程占用高load

top -Hp {进程pid}

thread id为十六进制格式转十六进制值

printf %x {线程pid}

指定特定行数堆栈信息

jstack {进程id}|grep -A 200 {线程id}

服务器线程相对较多,文件大小较大,一般不会考虑在服务器看,另外这样查也会导致忽略了一些统计信息

通过如下命令导出文件,下载到本地查

jstack -l {pid} >> {dump-file-path}

如何查看分析dump文件,请看下文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值