面试题--cpu高解决方案以及火焰图学习

Posted go大鸡腿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题--cpu高解决方案以及火焰图学习相关的知识,希望对你有一定的参考价值。

前言

在很多面试题中,有个高频的:线上cpu很高的时候,怎么处理

参考文章

cvte厂的巨佬,摩拜一波

套路

  1. top拿到占用cpu比较高的进程
  2. top -HP拿到进程中的线程pid
  3. jastack 对应pid | grep pid转十六进制(或者自己去文件找)

怎么优化

根据打印出来的堆栈信息,进行分析,也可以使用火焰图进行优化对应代码

步骤

  1. java -jar arthas-boot.jar
  2. 会显示正在运行的jar
  3. 然后选择对应的数值,进行profiler
  4. 导出成svg

由于现在没有特定代码导致cpu问题,我们就拿写相对比较占用cpu的代码看看

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

查看相关占用cpu代码


可以看到我们公司的代码很多调用这个类转换的方法,使用的是org.springframework.beans.BeanUtils#copyProperties(java.lang.Object, java.lang.Object, java.lang.Class<?>, java.lang.String…)

这个相对比较消耗性能的,怎么优化呢?

  1. BeanCopier的性能是PropertyUtils (apache-common)的504倍。
  2. PropertyUtils的性能是BeanUtils(apache-common)的1.71倍

再如参考文章中讲的例子:
一次线上服务高 CPU 占用优化实践

关于Log4j2 下 KafkaAppender 异步的问题,这个是框架本身自带的问题,需要对其有一定的了解,以及可以进行相应的优化,从而降低cpu的占用资源。

Arthas 火焰图

Y轴是指调用的深度,A调用B,B调用C,C肯定是在最上面的,然后B,然后A

X轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多

性能问题可以找最顶,因为调用深度比较深,还有占用比例cpu比较多

以上是关于面试题--cpu高解决方案以及火焰图学习的主要内容,如果未能解决你的问题,请参考以下文章

忘不掉的Linux系统高薪面试题

033_linux操作系统火焰图探测系统性能

Linux性能分析专题屠龙宝刀绘制传说中的cpu火焰图

火焰图(Flame Graphs)

Dask 仪表板配置文件选项卡使用情况(又名火焰图)

火焰图:全局视野的Linux性能剖析