性能分析利器——最简单的利用火焰图教程C&Java

本文介绍了如何使用perf工具在C/C++中绘制火焰图,以及如何利用async-profiler在Java中生成有意义的火焰图,以进行性能分析。通过调整perf的参数和使用FlameGraph,读者可以轻松上手性能优化。
摘要由CSDN通过智能技术生成

熟悉我的朋友可能知道,我是打中间件比赛出身,硕士一直在做分布式的东西,毕业后去了行业内比较大的厂做相对底层的东西,分布式数据库研发与性能优化。在追求极致性能的场景下,了解你的程序运行过程中cpu在干什么很重要,火焰图就是一种非常直观的展示cpu在程序整个生命周期过程中时间分配的工具。

关于火焰图介绍的文章其实比较多了,本文意在将这有点复杂的东西用最容易上手的方式介绍给大家。本文的所有代码都在Centos7.6的系统上执行过,如果有朋友发现在你的机器上执行不了也辛苦一定给我留言,这篇文章的方法也是我将来要反复要用的,任何错误和纰漏都是在坑我自己。

火焰图是什么:

#include <stdio.h>
void foo(){
    int i,j;
    for(i=0;i<1000;i++)
        j+=2;
}
int main(void) {
    int i;
    for(i=0;i<100000000;i++){
        foo();
    }
    return 0;
}

以上是一段很简单的c语言程序和与其对应的火焰图(程序用的别人的,图是我自己生成的,侵删),可以认为火焰图横轴代表程序运行的时间,上方重叠长条的就是调用栈。火焰图的颜色没有任何意义,主要要看的是某一层调用栈的时间占比。

比如对于图中的例子我们想看foo函数是否存在性能问题,我们就要首先去思考foo函数的这个绿色长条相对比在a.out这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值