Golang FlameGraph(火焰图)

Golang FlameGraph(火焰图),第1张

运行上述程序后,使用如下命令生成CPU火焰图:

go-torch -u http://localhost:8888/debug/pprof/ -p >profile-local.svg

效果图如下:

生成内存火焰图:

go-torch -u http://localhost:8888/debug/pprof/heap -p >heap-local.svg

效果图如下:

也可以分步骤查看结果:

1.Centos7 使用报错

perl: warning: Setting locale failed.

perl: warning: Please check that your locale settings:

LANGUAGE = "en_US.UTF-8",

LC_ALL = "en_US.UTF-8",

LC_PAPER = "en_US.UTF-8",

LC_MONETARY = "en_US.UTF-8",

LC_NUMERIC = "en_US.UTF-8",

LC_MEASUREMENT = "en_US.UTF-8",

LC_CTYPE = "en_US.UTF-8",

LC_TIME = "en_US.UTF-8",

LANG = "en_US.UTF-8"

are supported and installed on your system.

perl: warning: Falling back to the standard locale ("C").

解决方法:

export LC_ALL="C"

步骤:

1. 安装Arthas

wget https://github.com/alibaba/arthas/releases/download/arthas-all-3.5.4/arthas-bin.zip

mkdir -p arthas

unzip arthas-bin.zip -d arthas

2. attach目标程序

2.1 arthas

选择进程号

2.3 开始生成

profiler start

手动停止

profiler stop

火焰图svg文件会被存放到指定目录

接下来是解析环节,如何看出哪些行为占用的CPU较大

总的来说

1. 颜色本身没有什么意义

2. 纵向表示调用栈的深度

3. 横向表示消耗的时间

横向来看

由于横向表示消耗的时间,所以一个格子的宽度越大越说明其可能是瓶颈

纵向来看

由于纵向表示调用栈的深度,所以火焰的火苗尖部就是CPU正在执行的 *** 作

综上

主要看那些比较宽大的火苗

特别是那些平头的火苗

上述是默认的CPU火焰图

我们还可以利用它来生成内存火焰图  $ profiler start --event alloc

更多使用说明参考:https://arthas.aliyun.com/doc/profiler.html

或者我们可以自己通过JVMTI机制来实现一把

本质上火焰图和其他jstack等工具的实现原理一样,并且要解决的问题都是分析线上运行中的程序的各种运行时情况,帮助我们排查一些问题故障


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11234313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存