开车了,JMC坐稳 (jfr),看完记得收藏!

今天我们要开的车是,江铃汽车。全称Jiangling Motors Corporation,简称JMC。

一车在手,吃喝不愁。车作为男人的第二个老婆,拥有一辆JMC是所有成功男人的梦想。打开小小的车窗,任嘶吼的狂风揉捏自己的面庞,是一种让人无比享受的存在。

列车驶向何处,前方又是何方,全在掌舵者一念之间。

程序员掌舵,当然与众不同。我们今天的列车,就是jmc监控工具。

呸,撞车了。

与JMC撞车的,也是jmc,全称Java Mission Control,是故障排查的一大利器。

在世风日下的今天,强行扭正jmc的坐姿,也算是一股清流。它和jvisualvm一样,都被jdk给抛弃了,因为长得太胖,现在需要单独下载。

先看它的图标。

再看它的界面。

Flight Recorder
你可以看到,它是一个图形化的工具,生产环境中使用必然受到限制,你需要首先开通JMX才可以使用。但我习惯在压测的时候才用它。

因为它有一个Flight Recorder功能。

为什么里面这么多按钮,我仅仅提到Flight Recorder这个东西呢?因为其他东西都是点吧点吧就可以理解的,xjjdog要是再介绍一下的话,就像是智障一样。

但是Flight Recorder必须要详细描述下,因为智商不到80不好理解它。

Flight Recorder源自飞机的黑盒子,一看就是用来录制信息,然后事后分析的。在Java11中,它可以通过jcmd命令进行录制了。

主要有5个命令:configure、check、start、dump、stop。执行顺序的话,先start再dump,最后stop。例如:

jcmd <pid> JFR.start

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

jcmd <pid> JFR.stop

先来看下它的好处:

在保证低开销的基础上,JFR 提供的能力也令人眼前一亮。

例如:我们无需 BCI 就可以进行 Object Allocation Profiling,终于不用担心 BTrace 之类把进程搞挂了。

对锁竞争、阻塞、延迟,JVM GC、SafePoint 等领域,进行非常细粒度分析。甚至深入 JIT Compiler 内部,全面把握热点方法、内联、逆优化等等。

JFR 提供了标准的 Java、C++ 等扩展 API,可以与各种层面的应用进行定制、集成,为复杂的企业应用栈或者复杂的分布式应用,提供 All-in-One 解决方案。而这一切都是内建在 JDK 和 JVM 内部的,并不需要额外的依赖,开箱即用。

录制
录制谁好呢?还是录制一个tomcat吧。下图是录制了一分钟之后的结果,可以看到左边那一串长长的结果列表。

通过这些数据,可以清楚的了解到这一分钟时间内,整个操作系统以及JVM的所有数据情况。这花花绿绿的颜色,一看就知道是很厉害的样子。

线程
点击C2编译器线程,可以看到详细的热点类,以及方法内联后的代码大小。线程的Wait、Idea、Block等各种状态和时序,都能在这里看到。C2此时在疯狂运转。

内存
可以看到种类型的数据,每个时刻所申请的内存大小。这在排查一些内存泄漏问题的时候,不是一般的有用。


锁实例可以看到期间出现的所有Lock实例,以及它的使用信息。

文件和Socket
当然,对文件和Socket的操作也淋漓尽致,一目了然。包括什么时候读了多少数据,从哪里读写的,都可以从栈信息里看到。

方法调用
方法调用信息和排行。

垃圾回收
对垃圾回收的信息监控也是比较详细的。比如什么时候发生了垃圾回收,用的什么垃圾回收器,耗时,甚至是发生的时机等,都可以在这里看到。

JIT
编译这里,显示了更加详细的JIT相关信息,包括生成后的CodeCache大小。

TLAB
神奇的是,它连TLAB区域的申请信息都给录制了,不得不说是一个神器。

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

这个道理和Java语言中的ThreadLocal类似,避免了对公共区的操作,以及一些锁竞争。

发布了21 篇原创文章 · 获赞 0 · 访问量 154

猜你喜欢

转载自blog.csdn.net/weixin_46898270/article/details/105576313
今日推荐