• Arthas(7):profiler生成火焰图


    profiler

    profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

    profiler命令基本运行结构是profiler action [actionArg]

    参数说明:

    参数名称 参数说明
    action 要执行的操作
    actionArg 属性名模式
    [i:] 采样间隔(单位:ns)(默认值:10'000'000,即 10 ms)
    [f:] 将输出转储到指定路径
    [d:] 运行评测指定秒
    [e:] 要跟踪哪个事件(cpu, alloc, lock, cache-misses 等),默认是 cpu

    启动 profiler

    profiler start
    

    image-20220815150121489

    默认情况下,生成的是 cpu 的火焰图,即 event 为cpu。可以用--event参数来指定。

    此外,只有在linux/Mac上才支持这个命令,windows不支持会直接报错。

    获取已采集的 sample 的数量

    image-20220815150228678

    查看 profiler 状态

    可以查看当前 profiler 在采样哪种event和采样时间。

    image-20220815150244315

    停止 profiler

    生成 html 格式结果

    默认情况下,结果文件是html格式,也可以用--format参数指定:

    image-20220815150351423

    或者在--file参数里用文件名指名格式。比如--file /tmp/result.html

    通过浏览器查看 arthas-output 下面的 profiler 结果

    默认情况下,arthas 使用 3658 端口,则可以打开: http://localhost:3658/arthas-output/

    查看到arthas-output目录下面的 profiler 结果:

    img

    点击可以查看具体的结果:

    img

    如果是 chrome 浏览器,可能需要多次刷新。

    profiler 支持的 events

    在不同的平台,不同的 OS 下面,支持的 events 各有不同。比如在 centos下面:

    image-20220815150936041

    如果遇到 OS 本身的权限/配置问题,然后  缺少部分 event,可以参考async-profiler本身文档:async-profiler

    可以用--event参数指定要采样的事件,比如对alloc事件进入采样:

    $ profiler start --event alloc
    

    恢复采样

    $ profiler resume
    Started [cpu] profiling
    

    startresume的区别是:start是新开始采样,resume会保留上次stop时的数据。

    通过执行profiler getSamples可以查看 samples 的数量来验证。

    使用execute来执行复杂的命令

    比如开始采样:

    profiler execute 'start,framebuf=5000000'
    

    停止采样,并保存到指定文件里:

    profiler execute 'stop,file=/tmp/result.html'
    

    具体的格式参考: arguments.cpp

    查看所有支持的 action

    image-20220815151041037

    查看版本

    image-20220815151100665

    配置 framebuf 参数

    如果遇到生成的火焰图有 [frame_buffer_overflow],则需要增大 framebuf(默认值是 1'000'000),可以显式配置,比如:

    profiler start --framebuf 5000000
    

    配置 include/exclude 来过滤数据

    如果应用比较复杂,生成的内容很多,想只关注部分数据,可以通过 include/exclude 来过滤。比如

    profiler start --include 'java/*' --include 'demo/*' --exclude '*Unsafe.park*'
    

    include/exclude 都支持设置多个值 ,但是需要配置在命令行的最后。

    指定执行时间

    比如,希望 profiler 执行 300 秒自动结束,可以用 -d/--duration 参数指定:

    profiler start --duration 300
    

    生成 jfr 格式结果

    注意,jfr 只支持在 start时配置。如果是在stop时指定,则不会生效。

    profiler start --file /tmp/test.jfr
    

    file参数支持一些变量:

    • 时间戳: --file /tmp/test-%t.jfr
    • 进程 ID: --file /tmp/test-%p.jfr

    生成的结果可以用支持 jfr 格式的工具来查看。比如:

    生成的火焰图里的 unknown

  • 相关阅读:
    程序员面试金典题解
    Leetcode 解题报告
    常用小算法
    BestCoder 百度之星2016
    jQuery 删除或是清空某个HTML元素。
    dataTable 默认排序设定
    jquery tableExport 插件导出excel (无乱码) 比较简单的表格
    php 根据周数获取当周的开始日期与最后日期
    thinkphp5使用load和use引入第三方类
    判断checkbox是否选中
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/16588399.html
Copyright © 2020-2023  润新知