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性能監控工具visualvm來實作,這是一個可視化的工具,內建了多個指令行jdk工具和輕量級profiling功能。與hprof不同,visualvm能夠用在生産以及開發環境中,并且提供了額外的特性,如生成線程(和堆)dump、檢視heap dump、本地和遠端的java應用監控以及離線性能分析等等。
hprof也能通過如下的指令生成heap dump:
按照jep 240,這個功能将會被jvm中相同的功能所取代,這是通過使用像“jcmd”和“jmap”這樣的指令行工具做到的,如下所示:
或者
按照“jcmd”工具的文檔,如果要建立堆(hprof)dump的話,“jcmd”是推薦使用的工具。
移除“jhat”工具
“jhat”是一個堆分析工具,它會解析java heap dump并且能夠在web浏覽器中檢視解析過的heap dump。借助“jhat”,使用者可以執行一些标準的查詢或使用 oql接口編寫自定義的查詢。
按照jep 241, jhat是一個實驗性的、不再支援的過時工具。盡管jep并沒有指定特定的替代工具,但是infoq還是再次為使用者推薦 java visualvm ,用它來實作heap dump的建立、可視化和分析。visualvm還允許使用者執行自定義的查詢或使用标準的查詢。
====================================分割線================================