> 使用[async-profiler](https://github.com/jvm-profiling-tools/async-profiler)生成火焰图 [profiler 命令](https://arthas.aliyun.com/doc/profiler.html) 支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。 `profiler`{{}} 命令基本运行结构是 `profiler action [actionArg]`{{}} ### 查看所有支持的 action `profiler actions`{{execute T2}} ### 查看版本 `profiler version`{{execute T2}} ### 启动 profiler `profiler start --event cpu`{{execute T2}} > 默认情况下,生成的是 cpu 的火焰图,即 event 为`cpu`{{}} 。可以用`--event`{{}} 参数来指定。 ### 获取已采集的 sample 的数量 `profiler getSamples`{{execute T2}} ### 查看 profiler 状态 `profiler status`{{execute T2}} ### 停止 profiler #### 生成 html 格式结果 默认情况下,结果文件是`html`{{}} 格式。也可以用`--format`{{}} 参数指定: `profiler stop --format html`{{execute T2}} 或者在`--file`{{}} 参数里用文件名指名格式。比如`--file /root/arthas-output/result.html`{{}} 。 `profiler stop --file /root/arthas-output/result.html`{{execute T2}} ### 通过浏览器查看 arthas-output 下面的 profiler 结果 默认情况下,arthas 使用 8563 http 端口,[点击打开]({{TRAFFIC_HOST1_8563}}/arthas-output/) 输入账号 `arthas` 和密码 `arthas` 查看 arthas-output/ 目录下面的 profiler 结果: ![](https://arthas.aliyun.com/doc/_images/arthas-output.jpg) 点击可以查看具体的结果: ![](https://arthas.aliyun.com/doc/_images/arthas-output-svg.jpg) ### profiler 支持的 events `profiler list`{{execute T2}} 在不同的平台,不同的 OS 下面,支持的 events 各有不同。比如在 macos 下面: ```bash $ profiler list Basic events: cpu alloc lock wall itimer ``` 在 linux 下面 ```bash $ 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 ``` 如果遇到 OS 本身的权限/配置问题,然后缺少部分 event,可以参考`async-profiler`{{}} 本身文档:[async-profiler](https://github.com/jvm-profiling-tools/async-profiler) 可以用`--event`{{}} 参数指定要采样的事件,比如对`alloc`{{}} 事件进入采样: `profiler start --event alloc`{{execute T2}} ### 恢复采样 `profiler resume`{{execute T2}} `start`{{}} 和`resume`{{}} 的区别是:`start`{{}} 是新开始采样,`resume`{{}} 会保留上次`stop`{{}} 时的数据。 可执行`profiler getSamples`{{}} 可以查看 samples 的数量来验证。 ### 使用`execute`{{}} 来执行复杂的命令 比如开始采样: `profiler execute 'start,framebuf=5000000'`{{execute T2}} 停止采样,并保存到指定文件里: `profiler execute 'stop,file=/root/arthas-output/result.html'`{{execute T2}} 具体的格式参考: [arguments.cpp](https://github.com/jvm-profiling-tools/async-profiler/blob/v2.5/src/arguments.cpp#L50)