简述

Perf 命令(performance的简写)是 Linux 系统原生提供的性能分析工具,返回 CPU 正在执行的函数名以及调用栈(stack)。

通常,它的执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。

$ sudo perf record -F 99 -p 13204 -g -- sleep 30

注:perf record表示记录,-F 99表示每秒99次,-p 13204是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 30则是持续30秒。

执行之后会产生一个文本文件(perf.data)。为了便于阅读,使用 perf record 命令可以统计每个调用栈出现的百分比,然后从高到低排列。

$ sudo perf report -n --stdio

火焰图

火焰图是基于 perf 结果产生的 SVG 图片,用来展示 CPU 的调用栈。

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。

注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

互动性

火焰图是 SVG 图片,可以与用户互动。

鼠标悬浮显示

火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。

下面是一个例子。

mysqld'JOIN::exec (272,959 samples, 78.34 percent)

点击查看详细

在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。

左上角会同时显示**"Reset Zoom"**,点击该链接,图片就会恢复原样。

搜索

按下 Ctrl + F 会显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示。

局限

在这两种情况下,无法画出火焰图,需要修正系统行为。

调用栈不完整

当调用栈过深时,某些系统只返回前面的一部分(比如前10层)。

函数名缺失

有些函数没有名字,编译器只用内存地址来表示(比如匿名函数)。

参考资料

mysql火焰图_Linux 性能分析利器 -火焰图 flame graph相关推荐

  1. 【Linux性能分析】火焰图(Flame Graphs)的安装和基本用法

    转载:火焰图(Flame Graphs)的安装和基本用法 火焰图(Flame Graphs)的安装和基本用法 火焰图(Flame Graphs) 一.概述: 火焰图(flame graph)是性能分析 ...

  2. CentOS 7 Linux实时内核下的epoll性能分析后续 | 火焰图分析

    在<CentOS 7 Linux实时内核下的epoll性能分析>从源码角度分析了epoll在实时内核和非实时内核之间的差异,为了更好的展示问题所在,这里给出epoll和select在实时内 ...

  3. Golang pprof 性能分析与火焰图

    文章目录 1. 安装graphviz 1.1 下载 graphviz (windows 环境) 1.2 测试graphviz是否安装成功 2. 使用pprof 2.1 修改代码 2.2 火焰图生成 3 ...

  4. linux java火焰图_Linux程序性能分析和火焰图

    Linux程序性能分析和火焰图 Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多.其中应用分析性能方面Dtrace, Syst ...

  5. mysql show profile详解_SQL 性能分析利器 show profile

    本文首发个人公众号<andyqian>, 期待你的关注- 前言 在之前的文章中,我们提到过一些慢SQL优化的步骤.其中就包括:使用 explain 关键字来查看执行计划,是否命中索引. 通 ...

  6. Linux性能分析工具与图形化方法

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...

  7. mysql bytessent_如何对DSQLSERVER、MySQL、Orache语句性能分析

    SQLSERVER语句性能分析 SQL SERVER通过设置STATISTICS查看执行SQL时的系统情况. SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以 ...

  8. MySQL 进阶 索引 -- SQL性能分析(SQL执行频率:查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次、慢查询日志、 profile详情、explain)

    文章目录 1. SQL性能分析 1.1 SQL执行频率(可以查看当前数据库SQL的访问频次) 1.2 慢查询日志(可以记录用时较长的SQL) 1.2.1 开启慢查询日志 1.2.2 慢查询日志测试 1 ...

  9. MySQL调优之性能分析

    目录 1.SQL执行频率 2.SQL性能分析 慢查询日志 profile详情 开启profile 使用profile explain 1.SQL执行频率 MySQL客户端连接成功后,通过 show[s ...

最新文章

  1. 某厂:有微服务经验者优先!
  2. 机器人 海难饥荒_饥荒:这个人物后期轻松单挑Boss,缺点却很小,大力士都比不过...
  3. 【IOS 开发】Object - C 数组使用详解
  4. 深入了解 Java 之虚拟机内存
  5. 为Windows Server 2012 R2指定授权服务器
  6. jquery UI集合
  7. loadrunner11安装,提示少了Microsoft Visual c++2005 sp1运行时组件解决办法
  8. vue项目打包之后首页白屏的问题
  9. 静态HTML模板渲染
  10. win8系统用友U8服务器的设置,用友u8服务器参数配置
  11. JAVA:实现PigeonholeSort鸽巢排序算法(附完整源码)
  12. 慢下来,等一等自己的灵魂
  13. 牛牛找工作--网易2019实习生招聘编程题
  14. C语言常见问题(10):Sections of code should not be commented out
  15. win7计算机二进制,二进制-系统爱好者
  16. MyEclipse如何配置Tomcat
  17. java微信公众号面试题_使用微信公众号开发模拟面试功能
  18. 【LeetCode-1109】航班预订统计<Java版>
  19. 疫情期间,天天对着你“开枪”的额温枪,你知道它的工作原理吗?
  20. Intellij IDEA导入Github中的MAVEN多模块项目【保持项目样式】

热门文章

  1. 字节跳动自研线上引流回放系统的架构演进
  2. 【Ubuntu系统配置】006Ubuntu20.04安装QQ for Linux v3.0(del文件安装卸载)
  3. 搭建CTF-AWD训练平台
  4. native app 集成 cocos-2dx-js 3.11 (Android篇)
  5. 怎样在for循环变量中,将循环变量赋值给一个变量 批处理 bat
  6. 数据挖掘基本流程 CRISP-DM --项目实战总结 可操作性强
  7. python中取整求余的计算步骤
  8. (遇到问题) AAAI2021 pdf要求: CYMK颜色空间,png图片300DPI,字体嵌入pdf
  9. php表单数据类型,form表单中enctype属性的三种类型
  10. 小王的研发日记-自动对焦(硬件与计算机通信)