java工程对应每个文件,利用jfr文件分析java工程分享

引言:一般可以通过jstack来分析线程栈来获取一些线程信息,得到问题的解决入口。其使用简单,jstack pid即可查看线程信息,具体也有故障排查的使用案例。但是jstack相当于某一时刻的快照,如果我想全量分析某一时间段的内容,并且想要人性化的界面,那么就可以借助jcmd命令来生成JFR飞行记录仪,用java自带的jmc做分析和优化。

一、使用

1、找到java进程pid。(ps -ef | grep 工程)

5d542a2076dd

2、使用前解锁(jcmd [pid]  VM.unlock_commercial_features )

5d542a2076dd

3、开始jfr手动记录(有固定时长的记录方式,可自行百度,但是不太灵活故用手动方式)

jcmd [pid] JFR.start name=endless settings=profile delay=3s duration=0  compress=true

基本上后面参数不用动,不影响分析,delay是延迟多少秒执行,自己注意。还有返回结果中的recording编号要自己记住。

5d542a2076dd

4、查看是否正在运行(jcmd [pid] JFR.check )

5d542a2076dd

5、如果觉得要分析的时间段够了,就手动转存dump文件(后缀为jfr格式)

jcmd [pid] JFR.dump recording=8 filename="./shcrmserver.jfr" compress=true

注意:a、filename的相对路径是相对执行命令的目录而言的,可以从返回结果看出本次是在tomcat的bin目录下。b、recording编号要写正确。

5d542a2076dd

6、结束记录(jcmd [pid] JFR.stop recording=8 )。注意:8是和开始时分配的编号来定的

5d542a2076dd

7、拉下文件后,打开java安装目录,有个jmc.exe打开,将*.jfr拖入,等待加载

5d542a2076dd

8、开始分析。参数有很多,我自己也没有完全摸透,只分享我用到的一些参数查看。可自行学习其他具体参数。

一般信息:

分别记录了,堆使用量、cpu和GC信息。可以大致了解下总体运行概况

5d542a2076dd

内存

可以看到具体GC回收情况和总体GC每个区域回收时间和总体GC暂停概况,对于性能的调优是个很好的入口

5d542a2076dd

5d542a2076dd

代码

代码,主要是可以查看每个包执行耗时比例,甚至统计调用最多的方法等信息。可以用来优化代码的使用。

5d542a2076dd

5d542a2076dd

线程

线程是最值得参考的点之一,很多时候耗时操作都可以从这里得到答案。能查看争用最多的线程在哪个方法、哪个类执行,也可以看到等待时长最多线程是耗费在哪一步操作。包括热点线程号,可以对应日志进行查询

5d542a2076dd

5d542a2076dd

IO

这部分通常也是最关注的点之一,对文件IO和套接字IO都有详细统计。文件写入也会记录工程日志输出的IO操作。

5d542a2076dd

二、使用案例

三、总结

注意,使用前记得留出充足的空间写出jfr文件,否则会加载失败,功亏一篑。

最后,一切工具,都是为了更好更快解决问题所在,没有最优工具,只有最适合的工具。所以希望能继续积累排查、优化的实战经验,形成故障定位和解决的思路和策略,再结合工具快速解决问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值