如何查看JVM内存中的对象和执行中的方法

本机debugger就好了,远程的可以远程debugger, 在tomcat的catalina.sh里增加一行CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" 重启一下就可以在eclipse的Remote Java Application里通过ip和上面指定的端口进行远程debugger了。https://blog.csdn.net/shy_snow/article/details/79043148

内网生产无法远程debugger的怎么办?

使用jmap和jstack将堆内存(对象)和栈(方法)输出为文件然后下载下来进行查看。

pid:是jvm进程号,可以使用jps -ml或ps命令查看到

jvm内存对象统计:jmap -histo:live  pid

jvm内存对象查看:

先将内存导出为文件:   jmap -dump:format=b,file=dump.hprof pid

然后使用mat工具打开查看

里面有多个统计面板,类的占比,对象的引用关系,你可以看到占内存较多的类以及这些类被谁持有,结合方法栈和代码来继续分析。

 


jvm中线程执行中的方法(栈): jstack -l pid 

可以看到方法调用,方法的行号,就知道线程在执行什么方法。这个只能看到java的堆栈,一些本地堆栈看不到可以使用linux的pstack pid命令来继续深入查看。

你还想看到方法的耗时和返回值?

那你要用arthas工具的trace和watch命令;

trace 方法内部调用路径,并输出方法路径上的每个节点上耗时

解压arthas-bin.zip后执行java -jar arthas-boot.jar或者as.sh进入arthas命令行界面

然后输入要查看的类和方法名,格式为 :

trace 类名   方法名

https://arthas.aliyun.com/doc/trace.html

https://blog.csdn.net/shy_snow/article/details/108338604

垃圾回收器与JVM性能监控工具介绍以及java多线程安全性介绍ppt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值