java jmc使用_Java性能调优:利用JMC分析性能

Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻。

好的分析工具能起到事半功倍的效果,利用分析利器JMC、JFR,可以实现性能问题的准确定位。

本文主要阐述如何利用JMC分析系统性能

JMC:Java Mission Control

JFR:Java Flight Recorder

JMC打开性能日志后,主要包括7部分性能报告,分别是一般信息、内存、代码、线程、I/O、系统、事件。其中,内存、代码、线程及I/O是系统分析的主要部分,本文会重点进行阐述。

启动JMC,打开生成的JFR性能日志

1. 一般信息,如下图所示

c7ddbf088329cf37dadffbf0c282a556.png

图中, 堆使用量、CPU总体占用率、GC暂停时间是非常重要的三个指标

对于Java应用而言,GC暂停时间是最值得关注的指标。

2. 内存信息

a284b2c13efbaddc6cac75280d7e0417.png

2.1 通过内存信息,我们可以清晰的看到垃圾收集器的类型,垃圾收集的暂停时间,包括最短暂停时间、平均暂停时间、最长暂停时间,以及更为重要的垃圾收集频率(垃圾收集的周期及STW时长)。

2.2 垃圾收集

垃圾收集的详细报告,详细描述了堆的回收信息,垃圾收集过程中的异常事件,此处不一一详述。

2.3 GC时间

详细描述GC时间相关的信息

2.4 GC配置

详细列出垃圾收集过程中,GC的配置信息,主要包括年轻代、老年代的GC类型,GC过程中的CPU状态及GC时间比率

3. 代码分析

9012d3693593bdaf0fc3faeb178049e4.png

3.1 热点方法

82917e00946caaf2b55191b07a676727.png

通过查看热点方法调用栈,我们可以清晰的了解到系统的主要计算资源消耗情况。

我们举例说明,如上图中的ConcurrentHashMap的containKey方法及get方法,而两个方法都会执行计算hashcode的功能。当我们的应用出现先判断containKey,然后执行get方法时,我们可以省略containKey,这样可以省略一次hashcode的计算,可以节约计算资源。

3.2 调用树

72c47517bcfade1f5f33c71ec073609a.png

通过调用树,我们能以模块化的方式直观的看到系统运行状态。

通过上图,我们得知99.9%的热点方法是运行程序,这非常符合我们的预期,大家可以逐层展开方法,详细分析方法。例如:在本例中,我们发现List与Map之间的性能差异非常大,同样数量级的执行次数,List性能相较于Map就很差,这也符合我们的认知范围。

4. 线程

e213ee3a59c05625fe38f4873ca56a11.png

4.1 热点线程

00307066a769e2c46cdb231e1cd6eea3.png

热点线程一栏,详细列出了热点线程的数量及详情,通过详情,我们可以得知线程的执行情况。

d6974d16f01657fb7ef6467ce6c69497.png

系统性能分析初期,我们可以首先定位线程争用的情况,可以初步达到性能的飞跃。

5. IO

669b5b048c81cb1817664f4ae6504dd0.png

本文就先写到这里,如果错误及问题,请各位大师多多指教,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值