原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。java
今天咱們要開的車是,江鈴汽車。全稱Jiangling Motors Corporation,簡稱JMC。程序員
一車在手,吃喝不愁。車做爲男人的第二個老婆,擁有一輛JMC是全部成功男人的夢想。打開小小的車窗,任嘶吼的狂風揉捏本身的面龐,是一種讓人無比享受的存在。tomcat
列車駛向何處,前方又是何方,全在掌舵者一念之間。程序員掌舵,固然不同凡響。咱們今天的列車,就是jmc監控工具。微信
呸,撞車了。架構
與JMC撞車的,也是jmc,全稱Java Mission Control,是故障排查的一大利器。併發
在世風日下的今天,強行扭正jmc的坐姿,也算是一股清流。它和jvisualvm同樣,都被jdk給拋棄了,由於長得太胖,如今須要單獨下載。分佈式
先看它的圖標。高併發
再看它的界面。你能夠看到,它是一個圖形化的工具,生產環境中使用必然受到限制,你須要首先開通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的操做也淋漓盡致,一目瞭然。包括何時讀了多少數據,從哪裏讀寫的,均可以從棧信息裏看到。
方法調用信息和排行。
對垃圾回收的信息監控也是比較詳細的。好比何時發生了垃圾回收,用的什麼垃圾回收器,耗時,甚至是發生的時機等,均可以在這裏看到。
編譯這裏,顯示了更加詳細的JIT相關信息,包括生成後的CodeCache大小。
神奇的是,它連TLAB區域的申請信息都給錄製了,不得不說是一個神器。
TLAB的全稱是Thread Local Allocation Buffer,JVM默認給每一個線程開闢一個buffer區域,用來加速對象分配。這個buffer,就放在Eden區。
這個道理和Java語言中的ThreadLocal相似,避免了對公共區的操做,以及一些鎖競爭。
JFR,全稱Java Flight Recorder,咱們今天對它的介紹,就結束了。
車已經到站了,請下車的乘客作好準備,祝您旅途愉快。
做者簡介:小姐姐味道 (xjjdog),一個不容許程序員走彎路的公衆號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不同的味道。個人我的微信xjjdog0,歡迎添加好友,進一步交流。