前言

最近负责的一个核心服务,TP999总是被上游吐槽,失败率也比较高。TP999达到了200ms+,最终通过arhas的火焰图,直接定位到了耗时的原因,是由于对象多余的序列化和反序列化导致的,去掉后性能提示了30%。本文将会顺带介绍一下火焰图的使用。

火焰图生成

如何安装Arthas这里不在介绍了,不知道的可以看笔者的前一篇文章:
Arthas实战

1.profiler start 启动采集(默认是CPU)
2.profiler getSamples 查看采样的数量
3.profiler status  查看采样的状态(是否在运行,运行了多久)
4.profiler stop 停止并生成火焰图


大家可以看到火焰图生成的路径,可以通过路径打开,也可以通过web打开(默认情况下可以打开: http://localhost:3658/arthas-output/ )。

火焰图解析

这是刚才测试程序生成的火焰图:

1.这里的x轴代表采样总量(也就是此刻所有执行的耗时cpu的方法)。
这是注意的是x 轴并不代表时间,而是所有的调用方法合并后,按字母顺序排列。
2.Y轴代表方法的调用栈深度,每一层都是一个方法。顶部是正在执行的方法。当然调用栈越深,火焰就越高。
3.鼠标可以点击的选中的每个框就代表了一个栈里的函数,其宽度可以直接理解为CPU时间占比(其实是采样的数量以及与采样总量的占比)。
那么,也就是说占比比较宽的框就表示:
a.该函数运行时间较长(单次时间长)
b.被调用次数较多.(调用频率高)
进而被采样的次数比较多,占用的CPU时间多。

4.另外火焰图:
绿色部分代表Java代码
黄色部分代表JVM C++代码
橙色部分代表内核态C语言代码
红色代表用户态C语言代码

由此可知,火焰图可以直观的帮我们分析CPU占用情况。

实战排查


当时的系统火焰图如上,大家可以发现,这个方法被Jackson.parse 和 Jackson.writeToString 浪费了这么多的CPU耗时,果断进行了优化,去除掉了序列化。

总结

火焰图对于性能分析非常直观方便,笔者这里也只是抛砖引玉,欢迎大家分享、拍砖~

参考资料

1.acmqueue 火焰图文章
2.火焰图介绍

记一次Arthas火焰图(Flame Graph)性能分析实战相关推荐

  1. 超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下

    如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然.别慌,这里有一款低开销.自带火焰图.让你大呼好用的 Java 性能分析工具 - async ...

  2. 火焰图Flame Graph

    使用Flame Graph进行系统性能分析 火焰图(Flame Graphs)的安装和基本用法大话火焰图

  3. mysql火焰图_Linux 性能分析利器 -火焰图 flame graph

    简述 Perf 命令(performance的简写)是 Linux 系统原生提供的性能分析工具,返回 CPU 正在执行的函数名以及调用栈(stack). 通常,它的执行频率是 99Hz(每秒99次), ...

  4. 宋宝华: 用off-cpu火焰图进行Linux性能分析

    在<宋宝华:火焰图:全局视野的Linux性能剖析>一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析.但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU) ...

  5. ali arthas 火焰图_性能优化之火焰图-2020-11-15

    背景 相信大家都有过jvm程序运行导致cpu100% ,或者飙高的场景.这个排查的方式有很多,比如 linux 自带的top pidstat mpstat等,还有一些开源工具arthas 等:这里我介 ...

  6. ali arthas 火焰图_使用arthas 生成火焰图分析jvm

    arthas 是阿里巴巴开源的强大的jvm 应该分析工具,以下是使用arthas 生成jvm 火焰图的一个学习 项目使用docker-compose 运行,对于生成的火焰图使用nginx 提供一个访问 ...

  7. ali arthas 火焰图_阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点

    转自: 横云断岭的专栏 Arthas Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱. Github:https://github.com/alibaba/arthas 文档:ht ...

  8. 实时观测程序运行状态——火焰图(Flame Graphs)

    转载:(69条消息) 火焰图(Flame Graphs)的安装和基本用法_san.hang的博客-CSDN博客 火焰图(Flame Graphs) 一.概述: 火焰图(flame graph)是性能分 ...

  9. ali arthas 火焰图_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>[1]系列,今天给大家带来一款阿里开源的 Java 诊断利器 ...

最新文章

  1. cf792b循环链表
  2. php单例模式实现对象只被创建一次 mysql单例操作类
  3. c语言数组中的字母可以相等吗,C语言数组比较
  4. ThinkPHP多次重复提交问题的根源
  5. python 批量打印文档_使用python将Excel数据填充Word模板并生成Word
  6. 蓝桥杯2016年第七届C/C++省赛B组第五题-抽签
  7. 谷歌,IE,火狐浏览器内核
  8. Axure制作微信APP原型(二)登录注册模块
  9. C高级第二次PTA作业
  10. 微信小程序:微信公众号申请微信小程序并认证的步骤
  11. 华为复制加密门禁卡_将多种累赘门禁卡归一合并的最佳选择
  12. Go语言如何快速对接短信接口
  13. AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)...
  14. 【Typora 图片居中】彻底解决Typora图片无法居中的问题
  15. swing打地鼠游戏_你还记得那个超级玛丽吗?经典的单机游戏
  16. Ansible跨play引用变量的注意事项
  17. Can't find bundle for base name XXXX, locale zh_CN解决方法
  18. win10 英文版安装步骤
  19. bilibili直播间接收监听和发送弹幕api
  20. 有哪些「看似复杂,实则简单」的 PS 技巧?

热门文章

  1. linux终端删除键失灵,ubuntu服务器新建用户后,上下键删除键tab键失效,提示符只有$解决办法...
  2. Firefox 4最终发布,看起来像Opera [截屏浏览]
  3. python搭建webapi_Python 版本--金蝶云星空新版WebAPI SDK--新手快速入门指南
  4. 理解 HTTP 中的 multipart/form-data
  5. 购物车(七)-计算商品总价——计算总价-计算属性 数据缓存api-wx.setStorageSync()方法
  6. Python量化投资初探:自动化选股策略
  7. 你是温水里的青蛙吗?
  8. 搭建Lua开发环境(Lua解释器+IDEA编译器)
  9. 实验二 白盒测试 White box Testing
  10. Validation阻止表单自动提交,使用Ajax提交表单(使用Validation的submitHandler方法)