更新時間:2021-10-13 13:26:43 來源:動力節點 瀏覽823次
性能診斷是軟件工程師在日常工作中需要經常面對和解決的問題,在用戶體驗至上的今天,解決好應用的性能問題能帶來非常大的收益。Java 作為最流行的編程語言之一,其應用性能診斷一直受到業界廣泛關注。可能造成 Java 應用出現性能問題的因素非常多,例如線程控制、磁盤讀寫、數據庫訪問、網絡I/O、垃圾收集等。想要定位這些問題,一款優秀的性能診斷工具必不可少。
在 Java 的世界里,有許多診斷工具可供選擇,既包括像 jmap、jstat 這樣的簡單命令行工具,又包括 JVisualvm、JProfiler 等圖形化綜合診斷工具,同時還有 SkyWalking、ARMS 這樣的針對分布式應用的性能監控系統。下面分別對其進行介紹。
JDK 內置了許多命令行工具,它們可用來獲取目標 JVM 不同方面、不同層次的信息。
jinfo - 用于實時查看和調整目標 JVM 的各項參數。
jstack - 用于獲取目標 Java 進程內的線程堆棧信息,可用來檢測死鎖、定位死循環等。
jmap - 用于獲取目標 Java 進程的內存相關信息,包括 Java 堆各區域的使用情況、堆中對象的統計信息、類加載信息等。
jstat - 一款輕量級多功能監控工具,可用于獲取目標 Java 進程的類加載、JIT 編譯、垃圾收集、內存使用等信息。
jcmd - 相比 jstat 功能更為全面的工具,可用于獲取目標 Java 進程的性能統計、JFR、內存使用、垃圾收集、線程堆棧、JVM 運行時間等信息。
使用上述命令行工具或組合能幫您獲取目標 Java 應用性能相關的基礎信息,但它們存在下列局限:
無法獲取方法級別的分析數據,如方法間的調用關系、各方法的調用次數和調用時間等(這對定位應用性能瓶頸至關重要)。
要求用戶登錄到目標 Java 應用所在的宿主機上,使用起來不是很方便。
分析數據通過終端輸出,結果展示不夠直觀。
下面介紹幾款圖形化的綜合性能診斷工具。
JVisualvm是 JDK 內置的可視化性能診斷工具,它通過 JMX、jstatd、Attach API 等方式獲取目標 JVM 的分析數據,包括 CPU 使用率、內存使用量、線程堆棧信息等。此外,它還能直觀地展示 Java 堆中各對象的數量和大小、各 Java 方法的調用次數和執行時間等。
JProfiler是由 ej-technologies 公司開發的一款 Java 應用性能診斷工具。它聚焦于四個重要主題上。
方法調用 - 對方法調用的分析可以幫助您了解應用程序正在做什么,并找到提高其性能的方法。
內存分配 - 通過分析堆上對象、引用鏈和垃圾收集能幫您修復內存泄漏問題,優化內存使用。
線程和鎖 - JProfiler 提供多種針對線程和鎖的分析視圖助您發現多線程問題。
高級子系統 - 許多性能問題都發生在更高的語義級別上。例如,對于JDBC調用,您可能希望找出執行最慢的 SQL 語句。JProfiler 支持對這些子系統進行集成分析。
如果只需要診斷單機 Java 應用的性能瓶頸,上面介紹的診斷工具就已經夠用了。但隨著現代系統架構逐漸從單體轉變為分布式、微服務,單純使用上述工具往往無法滿足需求,這時就需要借助Jaeger、ARMS、SkyWalking這些分布式追蹤系統提供的全鏈路追蹤功能。分布式追蹤系統種類繁多,但實現原理都大同小異,它們通過代碼埋點的方式記錄 tracing 信息,通過 SDK 或 agent 將記錄的數據傳輸至中央處理系統,最后提供 query 接口對結果進行展示和分析,想了解更多分布式追蹤系統的原理可參考文章開放分布式追蹤(OpenTracing)入門與 Jaeger 實現。
以上就是關于“Java性能分析工具的介紹”,如果您想了解更多相關信息,不妨來關注一下動力節點的Java開發工具,相信會對大家有所關注。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習