暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python 内存系列(5)-cProfile结合flameprof生成火焰图

小儿来一壶枸杞酒泡茶 2021-03-06
4363

cProfile结合flameprof生成火焰图

在上一篇中,介绍使用cProfile模块对程序进行可视化性能分析主要是借助于Gprof2Dot来将分析器输出转换成 Graphviz 可处理的图像表述,我们就可以从图里分享相关的即可得到不同函数所消耗的时间分布信息。

换一个思路,如果我想使用火焰图,来展示我们的相关的调用链和堆栈信息是否可以呢?我们知道火焰图是基于 perf 结果产生的 SVG 图片,用来展示 CPU 的调用栈。

如何使用cProfile模块生成的文件来进行火焰图的呢?答案就是可以借助:flameprof 第三方包。

官网:https://github.com/baverman/flameprof

1.首先我们的需要安装:

pip install flameprof

PS:和Graphviz一样的如果安装上了还是无效的话,直接下载源码放置本地上进行运行也可以滴。

调用flameprof命令对cProfile输出的文件生成火焰图

(.venv) PS D:\code\vscode\py> flameprof .\result.out >csadsad.png
(.venv) PS D:\code\vscode\py> 

PS:如果是下载源码的方式拖到到本地的话,使用下面的命令:

python flameprof.py input.prof > output.svg

如果是使用pip install flameprof安装的话,使用:

flameprof .\result.out >csadsad.png

可以添加其他的参数用于设置图形宽度、行高、字体大小和阈值 选项



SVG文件可以查看的信息有:

  • 在工具提示中使用全名压缩函数名
  • 精确计时(累计和总计)
  • 调用计数(在悬停时的工具提示中)
  • 绿色条显示flameprof开始猜测计时比率的堆栈帧
  • 倒转火焰图显示所有调用的总时间

相关的图解:

图分成上下两部分,

  • 上部的图是按照函数调用栈和执行时间排列。

  • 下部反方向的图按照函数执行时间比例从大到小排列。

  • 上部的图中execute是最顶层的函数,往上是它调用的子函数,直到调用链最底层的函数。

  • 宽度表示每个函数的执行时间占用的比例,越宽表示越耗时。

说明

部分的图或资料来互联网收集整理,如有侵权,烦请联系,我会立即进行删除。

End

纯属个人实践中相关经验之谈,如有纰漏,还希望大佬们多多提点!小钟同学 | 文  【原创】| QQ:308711822


文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论