跳至主要內容
阿里开源的 Java 诊断神器 Arthas

第十六节:JVM 性能监控之 Arthas 篇

Arthas 是阿里开源的一款线上 Java 诊断神器,通过全局的视角可以查看应用程序的内存、GC、线程等状态信息,并且能够在不修改代码的情况下,对业务问题进行诊断,包括查看方法的参数调用、执行时间、异常堆栈等信息,大大提升了生产环境中问题排查的效率。

Arthas 的官方网站是 https://arthas.aliyun.com/doc/,目前最新的版本是 3.7.2。


沉默王二大约 7 分钟Java核心Java虚拟机
JVM 性能监控工具之可视化篇

第十五节:JVM 性能监控之可视化篇

前面我们已经讲了 JVM 性能监控工具之命令行篇,本篇我们来介绍一些可视化的性能监控工具,包括 JConsole、VisualVM、Java Mission Control 等,阿里的 Arthas 我们留到后面单独去讲。

可视化工具比命令行工具强大的地方就在于这些工具提供了更直观、更易于理解的性能数据视图,肉眼看上去,脑子就能快速 get 到问题所在,那这篇就来带大家看看这些工具的强大之处。


沉默王二大约 10 分钟Java核心Java虚拟机
JVM 性能监控工具之命令行篇

第十四节:JVM 性能监控之命令行篇

记得 2014 年我在写大宗期货交易平台的时候,遇到了一些棘手的问题,可能是因为我的并发编程知识掌握的不够扎实,导致出现了内存泄漏的问题。

当时排查了好久,用的工具就是 JDK 自带的 jconsole,之前也没有过类似的性能监控经验,就导致在查找问题的时候非常痛苦,至今印象深刻。

那今天我们就从工具篇出发,来看看这些命令行工具的具体使用方法,以及如何排查问题。

JDK 性能监控工具

除了我们的老朋友 java 和 javac 命令,在 Java 的 bin 目录下,还有很多其他的命令行工具,比如说用于性能监控的 jps、jstat、jinfo、jmap、jstack、jcmd 等等。


沉默王二大约 16 分钟Java核心Java虚拟机
深入理解 JVM 的垃圾收集器:CMS、G1、ZGC

第十一节:垃圾收集器

垃圾回收对于 Java 党来说,是一个绕不开的话题,工作中涉及到的调优工作也经常围绕着垃圾回收器展开。面对不同的业务场景,往往需要不同的垃圾收集器才能保证 GC 性能,因此,对于面大厂或者有远大志向的球友可以卷一下垃圾收集器。

就目前来说,JVM 的垃圾收集器主要分为两大类:分代收集器分区收集器,分代收集器的代表是 CMS,分区收集器的代表是 G1 和 ZGC,下面我们来看看这两大类的垃圾收集器。


沉默王二大约 16 分钟Java核心Java虚拟机
栈虚拟机和寄存器虚拟机,有什么不同?

第六节:栈虚拟机和寄存器虚拟机

本来这节内容是打算直接讲字节码指令的,但讲之前又必须得先讲指令集架构,而指令集架构又分为两种,一种是基于栈的,一种是基于寄存器的。

那不妨我们这节就单独来讲讲栈虚拟机和寄存器虚拟机,它们有什么不同,以及各自的优缺点。

栈和寄存器

关于栈这个数据结构,我们前面曾讲过,戳链接直达。

寄存器(Register)是中央处理器(CPU)内用来暂存指令、数据和地址的存储器,也是 CPU 中读写最快的存储器。


沉默王二大约 8 分钟Java核心Java虚拟机
Java 经典垃圾回收器详解

垃圾回收器性能指标

  • 吞吐量:程序运行时间占总运行时间(总运行时间=程序运行时间+垃圾回收时间)的比例,垃圾回收时间越少,吞吐量越高;
  • 暂停时间:STW的时间;
  • 内存占用:Java堆所占的大小。

以上三点构成不可能三角,即一款垃圾回收器不可能同时满足三点。随着硬件水平的提升,内存占用不再是我们关注的重点,评估垃圾回收器性能时,重点关注吞吐量和暂停时间。吞吐量和暂停时间是相互矛盾的,目前我们追求的效果是:在最大吞吐量优先的情况下,减小暂停时间。

垃圾回收器发展历史

  • 1999年JDK 1.3.1 发布第一款串行方式的Serial GC,ParNew垃圾回收器是Serial回收器的多线程版本;
  • 2002年2月26,Parallel GC和Concurrent Mark Sweep GC(CMS)跟随JDK 1.4.2一起发布;
  • Parallel GC在JDK 1.6后称为HotSpot默认GC;
  • 2012年,在JDK 1.7u4版本中,G1可用;
  • 2017年,JDK 9中,G1成为默认垃圾回收器,CMS被标记为过时;
  • 2018年3月,JDK 10中提升G1并行性;
  • 2018年9月,JDK 11引入了Epsilon垃圾回收器,同时引入ZGC(实验版本);
  • 2019年3月,JDK 12发布,增强G1,并引入Shenandoah GC(实验版本);
  • 2019年9月,JDK 13发布,增强ZGC;
  • 2020年3月,JDK 14发布,删除CMS,拓展ZGC在MAC和Windows上的应用。

沉默王二大约 13 分钟Java核心Java虚拟机
一次生产环境中 CPU 占用 100% 排查优化实践

第十八节:CPU 100%排查优化实战

前面给大家讲过一次 OOM 的优化排查实战,今天再给大家讲一个 CPU 100% 优化排查实战。

收到运维同学的报警,说某些服务器负载非常高,让我们开发定位问题。拿到问题后先去服务器上看了看,发现运行的只有我们的 Java 应用程序。于是先用 ps 命令拿到了应用的 PID


沉默王二大约 8 分钟Java核心Java虚拟机
史上最通俗易懂的ASM教程

史上最通俗易懂的ASM教程

一勺思想

We are all in the gutter, but some of us are looking at the stars. (我们都生活在阴沟里,但仍有人仰望星空 )- 王尔德 《温德米尔夫人的扇子》

举世混浊我独清,众人皆醉我独醒 - 屈原 《楚辞》

前言

ASM是一种通用Java字节码操作和分析框架。它可以用于修改现有的class文件或动态生成class文件。

**ASM **is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or to dynamically generate classes, directly in binary form. ASM provides some common bytecode transformations and analysis algorithms from which custom complex transformations and code analysis tools can be built. ASM offers similar functionality as other Java bytecode frameworks, but is focused onperformance. Because it was designed and implemented to be as small and as fast as possible, it is well suited for use in dynamic systems (but can of course be used in a static way too, e.g. in compilers).


沉默王二大约 8 分钟Java核心Java虚拟机
2
3