day4: JVM
Day4 学习计划详解:Arthas工具链实战与OOM问题排查
以下是 Day4 的详细学习步骤、核心知识点和实操指南,结合官方文档与真实案例,确保你高效掌握Arthas的核心功能。
上午(3小时):Arthas工具链学习与核心功能掌握
核心目标:掌握Arthas的安装、基础命令、核心功能(监控、诊断、热更新),理解火焰图生成逻辑。
1. 学习内容与步骤
Arthas安装与启动
安装方法:
选择目标进程:输入Java进程编号(如
1
),进入Arthas交互命令行。
核心命令学习
实时监控:
dashboard
:查看JVM内存、线程、GC状态;thread
:查看线程堆栈(thread -n 3
显示最忙的3个线程)。
方法诊断:
watch com.example.Service * '{params, returnObj}'
:监控Service
类所有方法的入参和返回值;trace com.example.Service getData
:追踪getData
方法的调用链路及耗时。
代码热更新:
jad --source-only com.example.Service > /tmp/Service.java
:反编译代码;修改代码后,使用
mc
编译、redefine
重新加载类。
火焰图生成原理
功能:通过采样CPU调用栈,可视化代码执行热点;
命令:
2. 学习产出
Arthas命令速查表:整理常用命令及其用途(如下表);
知识笔记:记录Arthas核心功能(如动态代码热更新、火焰图分析)。
dashboard
实时监控JVM状态
dashboard
thread -b
查看阻塞线程
thread -b
watch *Class* *Method*
监控方法入参/返回值
watch com.example.User getById
heapdump
导出堆内存快照
heapdump /path/to/dump.hprof
profiler start
启动CPU采样生成火焰图
profiler start
下午(3小时):模拟OOM问题排查与火焰图分析
核心目标:编写模拟OOM程序,使用Arthas定位内存泄漏点,生成并分析火焰图。
1. 实战步骤与代码示例
编写模拟OOM程序
代码示例:持续向集合中添加大对象,触发堆内存溢出。
运行程序并触发OOM
JVM参数:限制堆大小加速OOM触发。
使用Arthas诊断问题
步骤:
启动Arthas并附加到
OOMSimulator
进程;输入
dashboard
观察内存使用情况;输入
heapdump /tmp/oom_dump.hprof
导出堆内存快照;使用MAT(Memory Analyzer Tool)分析
oom_dump.hprof
,定位内存泄漏点(如ArrayList<byte[]>
占用最大内存)。
生成火焰图分析性能瓶颈
步骤:
分析火焰图:
横向宽度表示方法执行时间占比;
纵向表示调用层级,顶层为最耗时的根方法。
2. 交付物要求
OOM排查案例文档:
结构模板:
火焰图与堆内存快照:
提交
flamegraph.html
和oom_dump.hprof
文件(压缩后上传);在文档中附火焰图关键分析结论(如
ArrayList.add()
为性能热点)。
晚上(2小时):总结与输出
技术博客:
标题:《Day4:Arthas实战——从OOM排查到火焰图分析》
内容框架:
Arthas核心命令详解;
OOM问题模拟与堆内存分析;
火焰图生成与性能优化思路。
提交GitHub与文档:
创建仓库(如
arthas-oom-demo
),提交以下内容:OOMSimulator.java
(模拟代码);oom_dump.hprof
(堆内存快照,可选);flamegraph.html
(火焰图);OOM排查报告.md
(详细诊断过程)。
README.md:说明如何复现问题及使用Arthas诊断。
资源使用建议
官方文档:
Arthas官方文档:命令详解与案例;
MAT使用指南:堆内存分析工具教程。
工具准备:
MAT(Memory Analyzer Tool):下载链接;
VS Code插件:
JVM Profiler
(可视化火焰图)。
明日预习(Day5)
核心内容:JVM调优实战(堆大小、线程栈、直接内存);
工具准备:安装VisualVM或JConsole,准备线上模拟服务。
Day4完成标志:OOM问题成功定位、火焰图生成、排查文档完整。 若遇到问题:优先查阅Arthas官方文档,或在GitHub提交Issue寻求帮助。
Last updated