Flight Recorder源自飛機的黑盒子
Flight Recorder以前是商業版的特性,在java11當中開源出來,它可以導出事件到文件中,之后可以用Java Mission Control來分析。可以在應用啟動時配置java -XX:StartFlightRecording,或者在應用啟動之后,使用jcmd來錄制,比如
Pid是進程id
$ jcmd <pid> JFR.start
$ jcmd <pid> JFR.dump filename=recording.jfr
$ jcmd <pid> JFR.stop
Jdk12的jfr工具可以打開生成的ifr文件進行分析
Cpu使用率
Gc信息
是 Oracle 剛剛開源的強大特性。我們知道在生產系統進行不同角度的 Profiling,有各種工具、框架,但是能力范圍、可靠性、開銷等,大都差強人意,要么能力不全面,要么開銷太大,甚至不可靠可能導致 Java 應用進程宕機。
而 JFR 是一套集成進入 JDK、JVM 內部的事件機制框架,通過良好架構和設計的框架,硬件層面的極致優化,生產環境的廣泛驗證,它可以做到極致的可靠和低開銷。在 SPECjbb2015 等基准測試中,JFR 的性能開銷最大不超過 1%,所以,工程師可以基本沒有心理負擔地在大規模分布式的生產系統使用,這意味着,我們既可以隨時主動開啟 JFR 進行特定診斷,也可以讓系統長期運行 JFR,用以在復雜環境中進行“After-the-fact”分析。還需要苦惱重現隨機問題嗎?JFR 讓問題簡化了很多。
在保證低開銷的基礎上,JFR 提供的能力也令人眼前一亮,例如:我們無需 BCI 就可以進行 Object Allocation Profiling,終於不用擔心 BTrace 之類把進程搞掛了。對鎖競爭、阻塞、延遲,JVM GC、SafePoint 等領域,進行非常細粒度分析。甚至深入 JIT Compiler 內部,全面把握熱點方法、內聯、逆優化等等。JFR 提供了標准的 Java、C++ 等擴展 API,可以與各種層面的應用進行定制、集成,為復雜的企業應用棧或者復雜的分布式應用,提供 All-in-One 解決方案。而這一切都是內建在 JDK 和 JVM 內部的,並不需要額外的依賴,開箱即用。