JMC的秘密武器:如何获取并分析Java性能数据

对于我们常用的 HotSpot 来说,有更强大的工具,那就是 JMC。 JMC 集成了一个非常好用的功能:JFR(Java Flight Recorder)。

Flight Recorder 源自飞机的黑盒子,是用来录制信息然后事后分析的。在 Java11 中,它可以通过 jcmd 命令进行录制,主要包括 configure、check、start、dump、stop 这五个命令,其执行顺序为,start — dump — stop,例如:

jcmd <pid> JFR.start
jcmd <pid> JFR.dump filename=recording.jfr
jcmd <pid> JFR.stop

JFR 功能是建在 JVM 内部的,不需要额外依赖,可以直接使用,它能够监测大量数据。比如,我们提到的锁竞争、延迟、阻塞等;甚至在 JVM 内部,比如 SafePoint、JIT 编译等,也能去分析。

JMC 集成了 JFR 的功能,下面介绍一下 JMC 的使用。

1.录制

下图是录制了一个 Tomcat 一分钟之后的结果,从左边的菜单栏即可进入相应的性能界面。

JMC 录制结果主界面

通过录制数据,可以清晰了解到某一分钟内,操作系统资源,以及 JVM 内部的性能数据情况。

2.线程

选择相应的线程,即可了解线程的执行情况,比如 Wait、Idle 、Block 等状态和时序。

以 C2 编译器线程为例,可以看到详细的热点类,以及方法内联后的代码大小。如下图所示,C2 此时正在疯狂运转。

JMC 录制结果 线程界面

3.内存

通过内存界面,可以看到每个时间段内内存的申请情况。在排查内存溢出、内存泄漏等情况时,这个功能非常有用。

JMC 录制结果 内存界面

4.锁

一些竞争非常严重的锁信息,以及一些死锁信息,都可以在锁信息界面中找到。

可以看到,一些锁的具体 ID,以及关联的线程信息,都可以进行联动分析。

JMC 录制结果 锁信息界面

5.文件和 Socket

文件和 Socket 界面能够监控对 I/O 的读写,界面一目了然。如果你的应用 I/O 操作比较繁重,比如日志打印比较多、网络读写频繁,就可以在这里监控到相应的信息,并能够和执行栈关联起来。

JMC 录制结果 文件和 Socket 界面

6.方法调用

这个和 jvisualvm 的功能类似,展示的是方法调用信息和排行。从这里可以看到一些高耗时方法和热点方法。

JMC 录制结果 方法调用

7.垃圾回收

如果垃圾回收过于频繁,就会影响应用的性能。JFR 对垃圾回收进行了详细的记录,比如什么时候发生了垃圾回收,用的什么垃圾回收器,每次垃圾回收的耗时,甚至是什么原因引起的等问题,都可以在这里看到。

JMC 录制结果 垃圾回收

8.JIT

JIT 编译后的代码,执行速度会特别快,但它需要一个编译过程。编译界面显示了详细的 JIT 编译过程信息,包括生成后的 CodeCache 大小、方法内联信息等。

JMC 录制结果 JIT 信息

9.TLAB

JVM 默认给每个线程开辟一个 buffer 区域,用来加速对象分配,这就是 TLAB(Thread Local Allocation Buffer)的概念。这个 buffer,就放在 Eden 区。

原理和 Java 语言中的 ThreadLocal 类似,能够避免对公共区的操作,可以减少一些锁竞争。如下图所示的界面,详细地显示了这个分配过程。

JMC 录制结果 TLAB 信息

在后面的课时中,我们会有多个使用此工具的分析案例。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HLSK是一个开源的软件开发工具包,用于开发Half-Life游戏的MOD(模组),包括自定义的地图、角色和武器等。在HLSK中,武器重叠是一种常见的问题,指的是在游戏中,当玩家角色同时拥有多把武器时,这些武器的模型会出现重叠的现象。 武器重叠对游戏的视觉效果和实际操作都产生负面影响,因此需要进行消除。解决武器重叠问题的方法有几种: 1. 调整武器的位置和旋转角度:通过调整武器的位置和旋转角度,使得它们不再重叠。这需要对HLSK的代码进行修改,包括武器模型的坐标和旋转角度的调整。 2. 修改武器模型:有时,武器重叠的问题可以通过对武器模型进行修改来解决。可以更改武器的大小、形状或纹理,使其在游戏中不再重叠。 3. 删除多余的武器:如果玩家角色同时携带的武器过多,可以通过删除一些多余的武器来消除重叠。这可以在代码中删除与多余武器相关的代码段,从而避免它们的出现。 4. 创建特殊的武器切换系统:在一些情况下,重叠武器无法完全避免,如双持武器。为了改善体验,可以开发一种特殊的武器切换系统,当玩家激活某个武器时,其他重叠的武器会暂时隐藏。 总的来说,消除HLSK中的武器重叠可以通过调整武器位置、修改武器模型、删除多余武器或者创建特殊的武器切换系统来解决。这些方法需要开发者对HLSK的代码和模型进行适当的修改和优化,这样才能提供更好的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值