背景

相信大家都有过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相关推荐

  1. 吐血整理的 Android 性能优化思维导图,让面试官眼前一亮

    引言 现如今 Android 开发行业的主要问题是因为初级的 Android 开发者太多了,导致初级开发的市场过于饱和,所以也就进一步导致初级和中级的开发者面临更大的竞争,因此想要脱离这种竞争现状,只 ...

  2. java 性能 火焰图_性能调优工具-火焰图

    性能调优工具-火焰图 发布时间:2019-07-17 19:29, 浏览次数:402 前言 工具的进化一直是人类生产力进步的标志,合理使用工具能大大提高我们的工作效率,遇到问题时,合理使用工具更能加快 ...

  3. 网站性能优化思维导图

    前言 下面是看了大神的笔记做的思维导图,纯为整理 参考网站 juejin.im/post/5b6fa8- www.cnblogs.com/xianyulaodi- 性能优化 雅虎35条军规

  4. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  5. vue延迟渲染组件_性能优化之组件懒加载: Vue Lazy Component 介绍

    这篇文章分享了从遇到前端业务性能问题,到分析.解决并且梳理出通用的Vue 2.x 组件级懒加载解决方案(Vue Lazy Component )的过程. 初始加载资源过多 问题起源于我们的一个页面,下 ...

  6. 使用UE4开发VR项目_性能优化(一)_常用工具

    原作者:Mullin-ぼくリん <使用UE4开发VR项目-性能优化>系列文章将分成三篇分别介绍使用UE4开发VR项目的一些工具使用和VR优化思路.目的是总结UE4开发VR项目中常用的一些调 ...

  7. oracle sequences优化_性能优化-Oracle RAC中的Sequence Cache问题

    性能优化-Oracle RAC中的Sequence Cache问题 enq: SQ - contention 在RAC情况下,可以将使用频繁的序列Cache值增加到10000,或者更高到50000,这 ...

  8. mysql客户端工具_性能优化-理解 MySQL 体系结构(MySQL分库分表)

    实例和数据库 我们通常所说的 MySQL 数据库服务器由一个实例(instance)以及一个数据库(database)组成.实例包括一组后台进程/线程和许多内存结构,用于管理数据库:数据库由一组磁盘文 ...

  9. apache php 调优_性能优化之PHP优化

    一.语言级性能优化(一) PHP 性能问题的解决方向 PHP语言级别的性能优化 => PHP周边问题的性能优化 => PHP语言自身分析.优化 1.压力测试工具 Apache Benchm ...

最新文章

  1. 一站式学习Wireshark(一):Wireshark基本用法
  2. 北京自动驾驶提速:华为奥迪图森完成高速测试,百度包揽全部40张载人牌照...
  3. Redis常用命令之操作Set(集合)
  4. LeetCode_数组_中等题
  5. Play 2.0 用户指南 - 使用JSON库 -- 针对Scala开发者
  6. SecureCRT连接Linux的操作步骤
  7. 高考失常错过清华,而今保送清华直博,还发了数篇 Nature
  8. 分享MYSQL中的各种高可用技术
  9. Win7 Hotfix KB2685811 (64-bit)疑难杂症状之解药
  10. js获取ip地址的私有地址 或者公有地址
  11. Pytorch入门+实战系列五:Pytorch情感分类
  12. 【吴恩达】机器学习第16章异常检测以及ex8部分编程练习
  13. 西电人总结各it公司待遇
  14. 程序员在帖子发的问题,底下评论彻底演变成娱乐帖了……
  15. 《计算之魂》第1章 毫厘千里之差——大O概念(1.4节)
  16. 一、Python-劳务报酬计算器(新手练习)
  17. 让我摘下星星送给你_抖音想摘下星星给你摘下月亮给你是什么歌? 《星球坠落》让你忍不住单曲循环...
  18. 彩票模拟程序 [福利彩票-双色球] [体育彩票 - 大乐透]
  19. 中国联通5G+MEC技术研究与业务实践
  20. 拼多多获取商品详情数据API(调用代码展示)

热门文章

  1. 用HTML+CSS+JS做一个简单的个人网页
  2. java实现空心验证码_Java实现验证码
  3. 360Lib:WS-PSNR
  4. android 剪贴板服务,Android剪贴板用法详解
  5. Python的输入语句
  6. Android获取摄像头和存储空间权限
  7. 沃飞长空公共安全无人机,助力建设“空天地”一体化水文监测体系
  8. Tableau 空难统计分析(七)2014年的国际空难
  9. requests使用re爬取腾讯体育新闻
  10. Redis命令介绍之键值对操作