本文簡單介紹分析前的準備工作
第一步:生成數據源
應用診斷分析平臺(ATP)只提供診斷分析能力,需要您準備數據源以供分析。
1. 什么是數據源?
取決于您想分析的應用問題,數據源有所不同。
Q:發現GC頻率過快?GC回收效率低下?應用出現OutOfMemoryError等問題?
A:生成Java堆轉儲文件(Heap Dump)
Q:發現CPU負載過高?應用卡死?線程過高
A:生成Java棧文件
Q:評估GC性能?發現長時間卡頓?
A:尋找Java GC日志文件
2. 生成數據源
2.1 生成Java轉儲文件
Java轉儲文件即Heap dump文件,可以通過以下方式生成
說明 | 命令 |
jmap命令保存整個Java堆(推薦) |
|
jmap命令只保存Java堆中的存活對象 |
|
jcmd命令保存整個Java堆 |
|
在出現OutOfMemoryError的時候JVM自動生成(推薦) |
|
在出現Full GC前后JVM自動生成 |
|
編程的方式生成 | 使用 |
使用ATP官方客戶端生成 |
-XX:+HeapDumpBeforeFullGC
和-XX:+HeapDumpAfterFullGC
會導致JVM在發生Full GC前后都花費大量時間自動生成Java堆轉儲文件,建議您僅在需要的時候打開它們:
jinfo -flag +HeapDumpBeforeFullGC <pid> # 打開HeapDumpBeforeFullGC
jinfo -flag -HeapDumpAfterFullGC <pid> # 關閉HeapDumpAfterFullGC
2.2 生成Java棧文件
Java棧文件可以通過以下方式生成:
說明 | 命令 |
jstack生成,推薦 |
|
jcmd生成 |
|
使用ATP官方客戶端生成 |
2.3 生成Java GC日志文件
Java GC日志需要在應用啟動時設置GC日志打印相關的JVM參數來開啟,以下是推薦的參數設置,僅供參考:
# Java8及以下
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<path>
# Java9及以上
-Xlog:gc*:<path>:time
其它的GC日志打印相關參數可參考Oracle官方文檔
注:
使用以上參數可以將GC日志打印到<path>中,請務必指定path,否則GC日志默認會打印到stdout里,可能導致ATP無法正常解析
當前ATP只支持JDK8及以上版本的JDK生成的GC日志,且只支持Serial GC、Parallel GC、CMS GC、G1 GC和ZGC
第二步:上傳數據源
生成數據源后,您需要將它上傳到應用診斷分析平臺。根據數據源的不同,您需要先在頁面左側選擇合適的分析工具:
Java堆分析
Java線程棧分析
Java GC日志分析
然后點擊 上傳文件 按鈕上傳數據源。目前應用診斷分析平臺支持以下上傳方式:
通過URL上傳(為OSS文件生成URL鏈接請參見OSS文檔)
通過OSS上傳(需要您的授權,用以訪問OSS文件)
粘貼文本上傳(只支持線程棧分析和GC日志分析,需小于10MB)
本地文件上傳(只支持線程棧分析和GC日志分析,需小于10MB,僅支持*.log和*.txt擴展名)
注意,因為ATP平臺會下載您的文件,如果您使用OSS上傳會產生流量費用,詳情請參見OSS計費標準。
第三步:開始分析
當您的數據源上傳完成后,點擊 分析 按鈕進行分析,當分析完成后會自動跳轉到分析結果頁面以供您分析問題。具體如何進行問題分析請參見其它幫助文檔。