Async Profiler
最近一直忙着搞AI 的application adoption, 都没空记录点东西。 趁着最近有个memory的profiling,记录一下如何进行memory profiling.
对于大部分大厂,应该有成熟的监控工具,比如dynatrace,消费级产品使用起来很方便。这里不详细介绍。
Dynatrace有个很方便的火焰图,对于本地我也想要这个效果,那么你可以使用 Async Profiler。
安装
去这里安装 Async Profiler
这里是文档
Quick Start(本地最常用三连):
- asprof -d 30 -e cpu -o flamegraph -f cpu.html <PID>
- asprof -d 30 -e alloc --total -o flamegraph -f alloc.html <PID>
- asprof -d 30 -e alloc --live -o flamegraph -f heap.html <PID>
复制代码 CPU 看热点;alloc 看高频瞬时分配;alloc --live 看仍存活对象来源(等价于之前的 -e heap)。
基本操作
asprof 提供了 start, stop, dump, status 等基本操作,可以更灵活地控制采样过程。-d 参数只是 start -> sleep -> stop 的一个快捷方式。
- start: 启动采样。分析器会持续在后台运行。
- stop: 停止采样并输出报告。
- dump: 在不停止采样的情况下,生成一份当前已采集数据的快照。
- status: 查看当前采样状态。
例如,你可以手动开始,在需要的时候dump,最后再停止:- # 启动CPU采样
- asprof start -e cpu <PID>
- # ... 执行一些操作后 ...
- # dump出一份火焰图,但采样并未停止
- asprof dump -o flamegraph -f cpu-dump-1.html <PID>
- # ... 再次执行一些操作 ...
- # 停止采样并生成最终报告
- asprof stop -o flamegraph -f cpu-final.html <PID>
复制代码 JFR + JMC
Quick Start
Use VisualVM 创建一个JFR,或者你也可以用命令行,如下图
在JMC里查看
JFR+JMC功能很强大,可以进行很多topic的profiling,比如cpu,锁。
为什么用 JFR
<ul>低开销(生产可常驻,默认 |