OpenJDK 9:將會移除HPROF和jhat
OpenJDK正在從JDK中廢棄HPROF agent 并移除“jhat”工具。這是OpenJDK 9的Java SE平臺借助Jigsaw實現模塊化的結果,為了準備模塊化,起草了多項提議(JEP),并且其中有很多都已經接近完成了。
讓我們近距離地了解一下這兩個與模塊化JDK相關的JEP,它們的目標就在于移除HPROF agent和“jhat”工具:
移除JVM Tool Interface HPROF Agent
HPROF是一個profiler agent,它使用JVM Tool Interface(JVMTI)來提供工具接口,并且用到了 Bytecode Instrumentation 。HPROF agent能夠將profiling信息寫到文件中,這些信息包括基于allocation sites的堆使用情況、堆dump、CPU使用情況、爭用監控等,它還可以將這些信息通過socket進行發送。HPROF 無意成為生產型的工具 ,它能夠被下文所述的各種其他可選方案所替代:
HPROF能夠獲取heap allocation profile、CPU使用的采樣數據以及times profile,按照其最簡單的形式分別如下面的命令所示:
java -agentlib:hprof=heap=sites <classname> java -agentlib:hprof=cpu=samples <classname> java -agentlib:hprof=cpu=times <classname>
相應的功能可以通過Java性能監控工具 VisualVM 來實現, 這是一個可視化的工具,集成了多個命令行JDK工具和輕量級profiling功能 。與HPROF不同,VisualVM能夠用在生產以及開發環境中,并且提供了額外的特性,如生成線程(和堆)dump、查看heap dump、本地和遠程的Java應用監控以及離線性能分析等等。
HPROF也能通過如下的命令生成heap dump:
java -agentlib:hprof=heap=dump <classname>
按照 JEP 240 ,這個功能將會被JVM中相同的功能所取代,這是通過使用像“jcmd”和“jmap”這樣的命令行工具做到的,如下所示:
jcmd GC.heap_dump filename=<filename>
或者
jmap [option] <pid> where <option>: -dump:<dump-options> to dump java heap in hprof binary format dump-options: live dump only live objects; if not specified, all objects in the heap are dumped. format=b binary format file=<file> dump heap to <file> Example: jmap -dump:live,format=b,file=heap.bin <pid>
按照“jcmd”工具的 文檔 ,如果要創建堆(hprof)dump的話,“jcmd”是推薦使用的工具。
“jhat”是一個堆分析工具,它會解析Java heap dump并且能夠在Web瀏覽器中查看解析過的heap dump。借助“jhat”,用戶可以執行一些標準的查詢或使用 OQL接口 編寫自定義的查詢。
按照JEP 241, jhat是一個實驗性的、不再支持的過時工具。 盡管JEP并沒有指定特定的替代工具,但是InfoQ還是再次為用戶推薦 Java VisualVM ,用它來實現heap dump的創建、可視化和分析。VisualVM還允許用戶執行自定義的查詢或使用標準的查詢。
在未來的報道中,我們將會繼續討論上述的使用場景。
查看英文原文: OpenJDK 9: Life Without HPROF and jhat