资讯专栏INFORMATION COLUMN

在OR项目中使用火焰图

RobinQu / 1320人阅读

摘要:火焰图介绍看到里用火焰图觉得挺有意思的,又装逼又有用。今天在自己以前的项目中测试了下,下面贴个图留个纪念。火焰图安装参考安装其实主要就是安装内核探测工具。

火焰图介绍

看到openresty里用火焰图觉得挺有意思的,又装逼又有用。它可以快速的定位到程序性能的瓶颈,生成程序的调用栈并且计算调用栈中每部分的 CPU 消耗,能够比较容易的找到CPU占用高、内存泄漏等问题。今天在自己以前的项目中测试了下,下面贴个图留个纪念。

这里面不要看颜色,因为颜色是随机搞来的,没有任何意义。要看火焰山上纵向的高度和每个对应的长度。纵向的高度代表函数调用栈的深度,横向长度代表此函数执行占用CPU的比例。

下面来了解下火焰图工具如何安装。

火焰图安装

参考 http://kernelmaker.github.io/...

安装systemtap

其实主要就是安装内核探测工具 systemtap。(SystemTap 通过将脚本语句翻译成C语句,编译成内核模块。模块加载之后,依据时间处理机制来收集有关正在运行的Linux系统的信息)

    1. yum install yum-utils
    2. yum install kernel-devel
    3. debuginfo-install kernel
    4. yum install systemtap

第三步安装失败的话,使用内核版本号找到对应的包进行安装就好了。
完成后输入以下命令进行测试

    stap -ve "probe begin { log("hello world") exit() }"

如果安装成功则是这样

下载 openresty-systemtap-toolkit

要知道systemtap只是个内核探测工具,不只是可以用在openresty中的,你得自己写好脚本来进行埋点等工作。但是春哥已经在 openresty-systemtap-toolkit 中提供了许多可以直接使用的脚本,我们直接拿过来用就好了,毕竟我自己是不会写的。

下载 FlameGraph

使用上面openresty-systemtap-toolkit这些脚本后,我们其实已经可以拿到我们所需要的信息了,只是还是不够直观,所以我们得用FlameGraph火焰图生成工具来生成直观的图片。

使用示例

1.找到我们要监控的nginx的某个进程
ps -ef | grep nginx

2.ngx-sample-lua-bt 抓取栈信息(这个工具可以看到在某个文件对应行函数的情况)
此处我是把上面下载的openresty-systemtap-toolkitFlameGraph加到环境变量里面去了。所以直接输入命令就行了

ngx-sample-lua-bt -p 19075 --luajit20 -t 5 > temp.bt

3.使用fix-lua-bt把上面得到的文件转化更友好点(直接看到对应的lua函数)

fix-lua-bt temp.bt > a.bt 

4.使用下面两个FlameGraph中的命令将文件转化为svg图片

stackcollapse-stap.pl a.bt > a.cbt
flamegraph.pl a.cbt > a.svg

然后打开a.svg就可以看到火焰图了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39561.html

相关文章

  • idea 启用火焰功能

    摘要:开源项目是一个的低开销采样分析器,可以生成火焰图。集成了它的功能,使用起来更加的简单。开启火焰图按下快捷键选择勾选这就开启了火焰图功能。启动程序随便写一点代码使用下图中红色标注的方式启动火焰图黄色的部分是调用栈,其他的则是系统调用。 开源项目 async-profiler 是一个Java 的低开销采样分析器,可以生成火焰图。idea集成了它的功能,使用起来更加的简单。 开启火焰图 按...

    W_BinaryTree 评论0 收藏0
  • 基本性能分析,省了几百万美元

    摘要:本文是关于我如何应用基本性能分析技术,借助火焰图做了一处小改进,使得我们计算机集群的状况获得了倍的改善,并在第二年帮助节省了几百万刀。最终,通过对平均大小在的事件进行批量插入,我们的吞吐量获得了的提高。 本文是关于我如何应用基本性能分析技术,借助火焰图做了一处小改进,使得我们 Postgres 计算机集群的 CPU 状况获得了 10 倍的改善,并在第二年帮助 Heap 节省了几百万刀。针对用...

    张宪坤 评论0 收藏0
  • [译]保持Node.js的速度-创建高性能Node.js Servers的工具、技术和提示

    摘要:本文翻译自原文地址中文标题保持的速度创建高性能的工具技术和提示快速摘要是一个非常多彩的平台,而创建服务就是其非常重要的能力之一。在目录下,我们执行译者注现在的话可以使用新的形式的命令语法会在剖析完毕后,创建文件并自动打开浏览器。 pre-tips 本文翻译自: Keeping Node.js Fast: Tools, Techniques, And Tips For Making Hi...

    Lavender 评论0 收藏0

发表评论

0条评论

RobinQu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<