借助arthas工具打火焰图
1、下载arthas
在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败):
curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar
执行该程序的用户需要和目标进程具有相同的权限。比如以
admin
用户来执行:sudo su admin && java -jar arthas-boot.jar
或sudo -u admin -EH java -jar arthas-boot.jar
。如果 attach 不上目标进程,可以查看
~/logs/arthas/
目录下的日志。如果下载速度比较慢,可以使用 aliyun 的镜像:
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
java -jar arthas-boot.jar -h
打印更多参数信息。
2、选择应用 java 进程
$ $ java -jar arthas-boot.jar * [1]: 35542 [2]: 71560 math-game.jar
3、借助profiler
打火焰图
profiler
命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。
profiler
命令基本运行结构是 profiler action [actionArg]
参数说明
参数名称 | 参数说明 |
---|---|
action | 要执行的操作 |
actionArg | 属性名模式 |
[i:] | 采样间隔(单位:ns)(默认值:10'000'000,即 10 ms) |
[f:] | 将输出转储到指定路径 |
[d:] | 运行评测指定秒 |
[e:] | 要跟踪哪个事件(cpu, alloc, lock, cache-misses 等),默认是 cpu |
3.1 启动profile
$ profiler start Started [cpu] profiling
提示
默认情况下,生成的是 cpu 的火焰图,即 event 为cpu
。可以用--event
参数来指定。
3.2 获取已采集的 sample 的数量
$ profiler getSamples 23
3.3 查看 profiler 状态
$ profiler status [cpu] profiling is running for 4 seconds
3.4停止 profiler
生成 html 格式结果 默认情况下,结果文件是html格式,也可以用--format参数指定:
$ profiler stop --format html profiler output file: /tmp/test/arthas-output/20211207-111550.html OK
3.5 通过浏览器查看 profiler 结果
默认情况下,arthas 使用 3658 端口,则可以打开: http://localhost:3658/arthas-output/在新窗口打开 查看到arthas-output
目录下面的 profiler 结果:
点击可以查看具体的结果:
通常情况下我们的目标服务器和本地电脑网络不通,可以将结果文件下载到本地电脑,然后用浏览器打开查看。
4、profiler 支持的 events
在不同的平台,不同的 OS 下面,支持的 events 各有不同。比如,在 linux 下面:
$ profiler list Basic events: cpu alloc lock wall itimer Perf events: page-faults context-switches cycles instructions cache-references cache-misses branches branch-misses bus-cycles L1-dcache-load-misses LLC-load-misses dTLB-load-misses mem:breakpoint trace:tracepoint