准备工作
本文简单介绍分析前的准备工作
第一步:生成数据源
应用诊断分析平台(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计费标准。
第三步:开始分析
当您的数据源上传完成后,点击 分析 按钮进行分析,当分析完成后会自动跳转到分析结果页面以供您分析问题。具体如何进行问题分析请参见其它帮助文档。