ali arthas 火焰图_性能优化之火焰图-2020-11-15
背景
相信大家都有过jvm程序运行导致cpu100% ,或者飙高的场景。这个排查的方式有很多,比如 linux 自带的top pidstat mpstat等,还有一些开源工具arthas 等;这里我介绍2种 top+jstack 、arthas火焰图
我先模拟一个cpu飙高的场景
public static void main(String[] args) {
while (true) {
double v = new Random().nextDouble();
System.out.println(v);
}
}
Top+jstack
通过jps查询到进程id
通过top -hp 查询对应进行的线程id
jstack 进程id > js.log
将线程id转换为16 进制 //printf %x 线程id;最后在js.log 中搜索该值
"main" #1 prio=5 os_prio=31 tid=0x00007fc5b2012000 nid=0x1103(你的线程id 16进制) runnable [0x00007000040ff000]
java.lang.Thread.State: RUNNABLE //cpu100%对应线程状态一般为RUNNABLE
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
- locked <0x0000000740048fc8> (a java.io.BufferedOutputStream)
at java.io.PrintStream.write(PrintStream.java:482)
- locked <0x000000074001b290> (a java.io.PrintStream)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
- locked <0x0000000740048ed8> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
at java.io.PrintStream.write(PrintStream.java:527)
- eliminated <0x000000074001b290> (a java.io.PrintStream)
at java.io.PrintStream.print(PrintStream.java:639)
at java.io.PrintStream.println(PrintStream.java:778)
- locked <0x000000074001b290> (a java.io.PrintStream)
at com.example.demo2.CpuTest.main(CpuTest.java:16) //这里就是我们的main方法
最后找到代码问题就可以进行优化了
Arthas 热力图
在解压目录运行 java -jar arthas-boot.jar (需要在程序cpu100%的机器上运行)
找到对应的程序,我这里是 CpuTest 类
[INFO] arthas-boot version: 3.4.4
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 1891
[2]: 1910 org.jetbrains.idea.maven.server.RemoteMavenServer36
[3]: 2439 org.jetbrains.jps.cmdline.Launcher
[4]: 2440 com.example.demo2.CpuTest
// 输入 4
输入 profiler start
几秒钟后输入profiler stop
会有如下提示,然后将图片路径再浏览器中打开
[arthas@2440]$ profiler stop
OK
profiler output file: /Users/yangjianbin/IdeaProjects/test/arthas-output/20201115-235908.svg
[arthas@2440]$
20201115-235908.svg
大家生成的图片也类似这样,火焰图是代表cpu执行的时间片,图片上大家只要关注最上面红色小矩形可以清楚的看到cpu被分配到做 写操作上既(System.out.println()) 和线程Sleep;细心的人会看到最右边我箭头指出的地方,对那是Random函数花费的时间;可以很清楚的分析到打印花了大量的cpu工作,大家可以将打印代码去了,在运行验证看看cpu是不是还是那么高,结论我就不说了
image.png
今天的分享就到这里,希望对大家有帮助,欢迎指正&提问
ali arthas 火焰图_性能优化之火焰图-2020-11-15相关推荐
- 吐血整理的 Android 性能优化思维导图,让面试官眼前一亮
引言 现如今 Android 开发行业的主要问题是因为初级的 Android 开发者太多了,导致初级开发的市场过于饱和,所以也就进一步导致初级和中级的开发者面临更大的竞争,因此想要脱离这种竞争现状,只 ...
- java 性能 火焰图_性能调优工具-火焰图
性能调优工具-火焰图 发布时间:2019-07-17 19:29, 浏览次数:402 前言 工具的进化一直是人类生产力进步的标志,合理使用工具能大大提高我们的工作效率,遇到问题时,合理使用工具更能加快 ...
- 网站性能优化思维导图
前言 下面是看了大神的笔记做的思维导图,纯为整理 参考网站 juejin.im/post/5b6fa8- www.cnblogs.com/xianyulaodi- 性能优化 雅虎35条军规
- oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...
本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...
- vue延迟渲染组件_性能优化之组件懒加载: Vue Lazy Component 介绍
这篇文章分享了从遇到前端业务性能问题,到分析.解决并且梳理出通用的Vue 2.x 组件级懒加载解决方案(Vue Lazy Component )的过程. 初始加载资源过多 问题起源于我们的一个页面,下 ...
- 使用UE4开发VR项目_性能优化(一)_常用工具
原作者:Mullin-ぼくリん <使用UE4开发VR项目-性能优化>系列文章将分成三篇分别介绍使用UE4开发VR项目的一些工具使用和VR优化思路.目的是总结UE4开发VR项目中常用的一些调 ...
- oracle sequences优化_性能优化-Oracle RAC中的Sequence Cache问题
性能优化-Oracle RAC中的Sequence Cache问题 enq: SQ - contention 在RAC情况下,可以将使用频繁的序列Cache值增加到10000,或者更高到50000,这 ...
- mysql客户端工具_性能优化-理解 MySQL 体系结构(MySQL分库分表)
实例和数据库 我们通常所说的 MySQL 数据库服务器由一个实例(instance)以及一个数据库(database)组成.实例包括一组后台进程/线程和许多内存结构,用于管理数据库:数据库由一组磁盘文 ...
- apache php 调优_性能优化之PHP优化
一.语言级性能优化(一) PHP 性能问题的解决方向 PHP语言级别的性能优化 => PHP周边问题的性能优化 => PHP语言自身分析.优化 1.压力测试工具 Apache Benchm ...
最新文章
- 一站式学习Wireshark(一):Wireshark基本用法
- 北京自动驾驶提速:华为奥迪图森完成高速测试,百度包揽全部40张载人牌照...
- Redis常用命令之操作Set(集合)
- LeetCode_数组_中等题
- Play 2.0 用户指南 - 使用JSON库 -- 针对Scala开发者
- SecureCRT连接Linux的操作步骤
- 高考失常错过清华,而今保送清华直博,还发了数篇 Nature
- 分享MYSQL中的各种高可用技术
- Win7 Hotfix KB2685811 (64-bit)疑难杂症状之解药
- js获取ip地址的私有地址 或者公有地址
- Pytorch入门+实战系列五:Pytorch情感分类
- 【吴恩达】机器学习第16章异常检测以及ex8部分编程练习
- 西电人总结各it公司待遇
- 程序员在帖子发的问题,底下评论彻底演变成娱乐帖了……
- 《计算之魂》第1章 毫厘千里之差——大O概念(1.4节)
- 一、Python-劳务报酬计算器(新手练习)
- 让我摘下星星送给你_抖音想摘下星星给你摘下月亮给你是什么歌? 《星球坠落》让你忍不住单曲循环...
- 彩票模拟程序 [福利彩票-双色球] [体育彩票 - 大乐透]
- 中国联通5G+MEC技术研究与业务实践
- 拼多多获取商品详情数据API(调用代码展示)