
Java 监控 JFR
文章平均质量分 95
JFR是 Java 低消耗事后分析监控组件
hashcon
做自媒体技术分享很久了,大家的抬爱与支持让我很开心很感激,但是个人本来做这些也并不是为了收益,只是为了个人学习与传播知识帮助更多的人,所以我将全网所有账号全部收益,持续捐给各种公益项目,也算不辜负大家的抬爱,也是回报祖国对我的一番培养。
曾任职于顺丰,华为,网易等公司,从Java小白,成长为资深开发与项目组首席架构师。喜欢源码与开源,曾贡献 MyCat1.6 核心源码,贡献过druid,Spring Cloud,dubbox,Apache RocketMQ,Apache Bookeeper 等多开源项目。
展开
-
Java JFR 民间指南 - 事件详解 - jdk.ThreadAllocationStatistics
定时线程分配统计事件:jdk.ThreadAllocationStatistics引入版本:Java 11相关 ISSUES:Test jdk/jfr/event/runtime/TestThreadAllocationEvent.java fails with null thread:在某些情况下,jdk.ThreadAllocationStatistics 没有采集到 JFR 相关线程,导致空指针。这个 Bug 和 jdk/jfr/event/compiler/TestCompilerCompi原创 2021-04-28 20:50:28 · 505 阅读 · 0 评论 -
Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationOutsideTLAB
重新申请 TLAB 分配对象事件:jdk.ObjectAllocationOutsideTLAB引入版本:Java 11相关 ISSUES:JFR: RecordingStream leaks memory:启用 jdk.ObjectAllocationInNewTLAB 发现在 RecordingStream 中有内存泄漏,影响 Java 14、15、16,在 jdk-16+36 (Java 16.0.1) 修复。Introduce JFR Event Throttling and new j原创 2021-04-27 19:04:47 · 414 阅读 · 0 评论 -
Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationInNewTLAB
重新申请 TLAB 分配对象事件:jdk.ObjectAllocationInNewTLAB引入版本:Java 11相关 ISSUES:JFR: RecordingStream leaks memory:启用 jdk.ObjectAllocationInNewTLAB 发现在 RecordingStream 中有内存泄漏,影响 Java 14、15、16,在 jdk-16+36 (Java 16.0.1) 修复。Introduce JFR Event Throttling and new jdk原创 2021-04-23 16:36:28 · 357 阅读 · 0 评论 -
Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationSample
对象分配采样:jdk.ObjectAllocationSample引入版本:Java 16相关 ISSUE:Introduce JFR Event Throttling and new jdk.ObjectAllocationSample event (enabled by default)各版本配置:Java 16:默认配置(default.jfc):配置值描述enabledtrue默认启用throttle150/s每秒最多采集 150 个stackT原创 2021-04-22 19:06:38 · 536 阅读 · 0 评论 -
深度探索JFR - JFR定位线上问题实例 - JFR导致的雪崩问题定位与解决
最近发现一个应用,使用默认的 JFR 配置,发生了类似于雪崩的现象,这里记录下,引以为戒。Key takeawaysJFR 的线程堆栈 dump 采集默认周期是everyChunk,也就是每次新建一个Chunk就会采集一次。默认每个Chunk大小为 12M,在线程比较多的时候,堆栈 dump 可能大于 12M,导致 JFR 一直切换新的 Chunk,然后又触发evenryChunk导致无限循环而雪崩。对于 JFR 默认事件采集配置(位于JDK目录/lib/jfr/default.jfc),每个采.原创 2020-12-02 18:38:52 · 53902 阅读 · 0 评论 -
JFR 定位因为 SSL 导致 CPU Load 飚高的问题
问题场景在某一时刻,某个微服务的某个实例 CPU 负载突然飚高:同时建立了很多数据库链接:其他实例没有这个现象。问题定位由于建立了很多数据库链接,猜想可能是数据库比较慢,查看数据库这段时间的 SQL 统计,发现数据库并不慢:其中这个微服务这段时间的热点 SQL,执行并不慢。那么问题出在了哪里呢?可能是由于 GC,可能是由于 safepoint,还有可能是获取锁时间过长(参考:Java 监控 JFR全解),我们 dump 一下 JFR 并查看其中的 safepoint,GC 以及 Monit原创 2020-09-27 19:43:48 · 31485 阅读 · 0 评论 -
深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(3)
本文基于 OpenJDK 113. 虚拟机相关 Event3.3. JIT即时编译相关JIT 即时编译可能会遇到编译后的代码缓存占满,或者因为空间有限或者代码设计问题,导致某些关键方法需要重编译导致性能问题,以及因为代码块过大导致编译失败从而性能有问题,这些问题我们可以通过 JFR 中相关的 Event 进行查询。JFR 对于 Java 开发可以完全替换 JVM 编译日志。额外讲解:JIT 相关的知识首先,这里简单介绍下 JIT 相关的知识(这里我推荐看 O’Rerilly 上面的 Java.原创 2020-07-10 19:01:12 · 57947 阅读 · 0 评论 -
JFR定位由于可能的JDK11的bug导致Log4j2 CPU占用100%的问题
本文基于OpenJDK 11最近使用Spring Cloud Gateway的时候,遇到了一个奇怪的问题:线上有3个 API 网关实例,压力均衡,平稳运行3天后,突然有一个实例,CPU飚高,并且响应时间增加很多,从几十毫秒涨到了几分钟。线上是 k8s 管理容器,立刻停掉了这个 pod,重建,恢复正常。线上我们开启了 JFR 记录(可以参考我的另外系列文章:Java 监控 JFR),通过 JMC 查看下出问题的 JFR 记录。首先我们来看 GC,我们的 GC 算法是 G1,主要通过 G1 Gar.原创 2020-06-28 20:07:56 · 7776 阅读 · 0 评论 -
深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(2)
2. JAVA 应用相关2.4. Java Monitor 同步锁相关主要是三种 Event:当进入同步块,尝试获取锁的时候,产生 JavaMonitorEnter Event;当调用 Object.wait() 进入等待时,会产生 JavaMonitorWait Event;当 锁升级(另一种说法是锁膨胀)时,产生 JavaMonitorWait Event。下面我从网上看到的这张图,有...原创 2020-04-07 19:48:05 · 58804 阅读 · 0 评论 -
深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(1)
Event 采集详细配置目前,JDK 11 一共有136个 Event 采集配置。这里会比较详细的去看每一个Event,并说明基本应用,建议配置。如果 default.jfc 中没有打开或者需要修改的配置,会将配置文件代码发出来。1. JFR 相关 Event一共4个 Event,但是需要关心的就下面这两个Data Loss:数局丢失 Event,当有数据发生丢失时,会有这个Event ...原创 2020-04-03 18:11:55 · 59476 阅读 · 0 评论 -
深度探索JFR - JFR详细介绍与生产问题定位落地 - 2. 通过一个线上调优例子了解JMC 与 Event 结构与详细配置
查看 JFR 事件的工具 - JMC (Java Mission Control)官网地址:https://adoptopenjdk.net/jmc.html国内下载起来比较慢,建议在aws上面建一个欧洲法兰克福的实例,在这个实例上先下载好,然后传输到本地。或者直接用我下面提供的连接下载,我也会跟着官网上面的版本进行更新的。我的私人下载地址:https://zhxhash-blog.oss-...原创 2020-04-01 16:52:53 · 60212 阅读 · 0 评论 -
深度探索JFR - JFR详细介绍与生产问题定位落地 - 1. JFR说明与启动配置
本文基于 OpenJDK 11 并涉及一些之后版本的特性,非 OpenJDK 11 的特性会被特殊标记出来什么是 JFR?我们都知道,黑匣子是用于记录飞机飞行和性能参数的仪器。在飞机出问题后,用于定位问题原因。JFR 就是 Java 的黑匣子。JFR 是 Java Flight Record (Java飞行记录) 的缩写,是 JVM 内置的基于事件的JDK监控记录框架。这个起名就是参考了...原创 2020-04-01 11:04:22 · 63498 阅读 · 5 评论