转载

开车了,JMC坐稳 (jfr)

开车了,JMC坐稳 (jfr)

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。

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

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

开车了,JMC坐稳 (jfr)

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

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

呸,撞车了。

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

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

先看它的图标。

开车了,JMC坐稳 (jfr)

再看它的界面。

开车了,JMC坐稳 (jfr)

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吧。下图是录制了一分钟之后的结果,可以看到左边那一串长长的结果列表。

开车了,JMC坐稳 (jfr)

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

线程

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

开车了,JMC坐稳 (jfr)

内存

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

开车了,JMC坐稳 (jfr)

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

开车了,JMC坐稳 (jfr)

文件和Socket

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

开车了,JMC坐稳 (jfr)

方法调用

方法调用信息和排行。

开车了,JMC坐稳 (jfr)

垃圾回收

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

开车了,JMC坐稳 (jfr)

JIT

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

开车了,JMC坐稳 (jfr)

TLAB

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

开车了,JMC坐稳 (jfr)

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

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

End

JFR,全称Java Flight Recorder,我们今天对它的介绍,就结束了。

车已经到站了,请下车的乘客做好准备,祝您旅途愉快。

近期热门文章

996的乐趣,你是无法想象的

魔幻现实主义,关爱神经衰弱

《 一切荒诞的傲慢,皆来源于认知 》

不要被标题给骗了,画面感十足的消遣文章

《必看!java后端,亮剑诛仙》

后端技术索引,中肯火爆。全网转载上百次。

《学完这100多技术,能当架构师么?(非广告)》

精准点评100多框架,帮你选型

作者简介: 小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流

开车了,JMC坐稳 (jfr)

原文  http://mp.weixin.qq.com/s?__biz=MzA4MTc4NTUxNQ==&mid=2650520945&idx=1&sn=6796dd303bece439d47966b8349439f2
正文到此结束
Loading...