11 HotspotVM
文章平均质量分 89
经过 Hotspot VM 调试的相关问题
教练、我想打篮球
这个作者很懒,什么都没留下…
展开
-
58 应用服务 hang 住, 导致服务 503 Service Unavailable
这是之前 我们测试环境出现的一个问题一个项目, 代码调整了之后, 发布到测试环境 之后, 几分钟之后 整个系统访问这个服务 出现了 "503 Service Unavailable", 然后 当时的处理方式为 临时重启服务但是过了一会儿之后 同样的问题还是会出现, 导致 前端服务调试不了这个我在调试的时候, 没有怎么查看日志, 因为一些信息已经还是比较明显了, 这里会贴出 具体的日志假设这个服务为 ServiceA。原创 2023-01-23 20:38:15 · 1669 阅读 · 0 评论 -
57 mac 中 SIGINFO 信号, jdk8 支持, 但是 jdk9 不支持?
问题来自于文章中的测试用例 Test07Signal2ParentProcess, 可以看到 我当时标记了一个 "todo, not work in hostpostVM9"然后 问题是这样的, 我同一台机器, 然后 jdk8 带上 SIGINFO 去执行 Test07Signal2ParentProcess 没有问题, 但是 jdk9 带上 SIGINFO 去执行 Test07Signal2ParentProcess 报错如下然后 jdk9 执行报错如下。原创 2023-01-15 11:07:43 · 327 阅读 · 0 评论 -
56/10 shell脚本 后台启动 程序1 + “tail -f log“, ctrl +c 导致程序1中断
接上一篇文章,我们来详细 参照对比一下 这个问题的各种情况主要的脚本如下类似, 第一条命令 后台启动 程序1, 然后 第二条命令 tail -f 查看日志然后 ctrl+c 中断 "tail -f" 第一条命令的进程 也收到了 SIGINT 的信号。原创 2023-01-08 18:11:58 · 967 阅读 · 0 评论 -
55 处理错误的树形数据结构导致不断地添加元素到集合中 OOM
呵呵 这是最近一个 前同事/朋友 碰到的一个问题主要的问题是 在 dump 文件中发现了很多 LinkedList$Node 的节点然后 整个问题 抛出来的错误是 OOM呵呵 这种问题 还是相当好处理的这里 仅仅是 简单记录一下前因后果。原创 2022-12-31 17:10:56 · 736 阅读 · 0 评论 -
54 线程最外层异常的处理
之前在 kafka 消费者客户端的一个 case 中曾经看到了这样的了一个情况我没有配置 "group.id", 然后 kafka 客户端抛出了 InvalidGroupIdException然后 输出的日志信息 除了类型, 其他 什么都没有, 主要是 么有堆栈信息这里 来大致看一下 这个问题, 以及 衍生出一些 其他的知识点, 诸如 dispatchUncaughtException 是怎么调用的, 我们平常 看到的错误信息 是怎么输出的?原创 2022-12-24 10:01:39 · 1210 阅读 · 0 评论 -
22 (续01)偏向锁的重入 以及 线程1获取偏向锁并释放线程2获取锁 的调试
前言呵呵 最近收到了一个 有意思的评论然后 花了一天的时间看了一下, 确实是非常有意思, 也不枉费 这一天的时间了好在 有所收获问题也挺有意思的, 因此 今晚[2022.01.28]花了一些时间来记录该评论来自于偏向锁的重入 以及 线程1获取偏向锁并释放线程2获取锁 的调试评论的具体信息如下SpectacuLar Now:有进行多次测试吗?我多次测试发现,后面进行的线程有事可以获取偏向锁,有时会膨胀成轻量级锁,请问这是为什么SpectacuLar Now:p...原创 2022-01-28 21:41:58 · 1433 阅读 · 0 评论 -
53 记一次自定义 classloader 导致的 metadataspace OOM
这是最近 flink 集群上面暴露出现的一个问题具体的细节原因 就是 flink 上面提交任务的时候, 自定义的 classloader 加载 driver.jar 然后导致 metaspace OOM由于这边的 TaskManager metadataspace 配置相对较小(MaxMetaspaceSize配置为96M), 然后导致 出现了 metadataspace 的 OOM。原创 2022-12-24 10:02:18 · 1572 阅读 · 0 评论 -
52 如何 尽可能的减少 自定义ClassLoader 造成的影响
接着可以先看一下 这一篇文章, 明确一下 上下文这里 主要说的是 如果我们的场景中存在自定义的 classloader 的情况下应该 怎么尽可能少的减小 自定义classloader 的存在造成潜在的 内存泄漏的风险第一是 classloader 的数量的控制, 其次是 一些代码层面的一些控制, 需要明确另外 在文章中, 还有一些 可以看到的疑问, 没有提到的, 这里一起看一下以下测试用例基于 jdk8, 部分截图基于 jdk9。原创 2022-12-17 10:02:15 · 490 阅读 · 0 评论 -
51 java.lang.Class/java.lang.ClassLoader/InstanceKlass/ClassloaderData 的卸载
之前 碰到了一个 flink 基于 ChildFirstClassLoader 来进行任务隔离 导致的内存泄漏的问题然后 使用 demo 复现了一下 问题之后 想探索一下 java language 中 类型的卸载相关并且会 拓展一些其他的知识以下测试用例基于 jdk8, 部分截图基于 jdk9。原创 2022-12-10 09:38:07 · 698 阅读 · 0 评论 -
50 jhat 中 java.lang.String 的实例占用空间为什么是 28 bytes ?
此问题是 多个 classloader 加载的同类限定名的Class 在 jhat 中显示不全d 同一时期发现的问题 大致的情况是 看到了 jhat 中统计的各个 oop 的占用空间 似乎是不太能够对的上 比如 java.lang.String, 在 64bit vm 上面 开启了 UseCompressedOops 之后, 应该是占用 (12 + 4 + 4) + 4[对齐] = 24, 才对 但是 实际上在 jhat 显示的是 28 bytes 我们这里来看一下这个问题, 顺便也可以 扩展一些扩展一原创 2022-12-03 10:27:28 · 657 阅读 · 0 评论 -
49 多个 classloader 加载的同类限定名的Class 在 jhat 中显示不全
呵呵 这是在之前 排查一个 flink 的相关问题的时候 发现的一个问题flink 默认的 job 隔离是基于 Classloader 来进行隔离的直到 最近才有时间来看一下这个问题的原因, 究其代码 也还是比较容易找到大致记录一下以下内容, 截图 基于 jdk8。原创 2022-11-26 11:17:10 · 880 阅读 · 0 评论 -
48 基于 jdk9 编译的 jdk8 的字节码报错
呵呵 大概是由于最近的这个 “Apache Log4j被曝存在严重高危险级别远程代码执行漏洞”昨天晚上 编译了一下 logging-log4j2-log4j-2.15.0-rc2, 项目需要一个 toolchain.xml 的一个配置, 里面需要配置为 jdk9因此 我的项目配置的 jdk 为 jdk9然后 idea 里面默认的 字节码 级别为 jdk8因此 就造成了这个 基于 jdk9 编译的 jdk8 的字节码进而 造成了这里的问题。原创 2022-11-19 09:38:31 · 1020 阅读 · 0 评论 -
47 VM.maxDirectMemory() 来自于哪里
最近在中有还有一些问题比如 java.nio.ByteBuffer 中分配空间的时候, 直接内存 受限于 Bits.maxMemory在 netty 中的 PlatformDependent 中分配空间的时候, 直接内存 受限于 PlatformDependent.DIRECT_MEMORY_LIMIT然后 这两个 maxMemory 均是来自于 VM.maxDirectMemory, 那么 这个 VM.maxDirectMemory 又是怎么来的呢?原创 2022-11-12 09:18:39 · 539 阅读 · 0 评论 -
21 (续01)String.intern 同一个字符串返回不同的引用
前言呵呵 最近有网友评论了String.intern 同一个字符串返回不同的引用然后 我又回来回顾了一下 这个问题在文章末尾提到了这么一句话, 这就是我们这里关注的内容了这里就没有去查看具体的小版本号了, 所以理论上来说 在没得 reference_map 的处理之前, full gc 会回收掉 "2372826"在添加了 reference_map 相关处理之后,full gc 不会回收掉 "2372826"重新测试了一下 jdk7 下面, fullgc 之后 ...原创 2021-11-21 19:59:44 · 389 阅读 · 0 评论 -
46 调试启动 suspend=y 的情况下, jps 得到 -- main class information unavailable
呵呵 最近有一些 需要远程调试 flink 代码的需求然后 太久了不用, 有些 生疏, 然后 碰到了一些问题如下配置添加到了 flink taskManager 上面之后, 发现 taskManager 一直没有启动起来然后 使用 jps 查看进程, taskmanage 对应的进程一直查询不出来, 最终得到的显示是 "-- main class information unavailable"然后 才在网上搜索了一下 这个 suspend=y 的意思。原创 2022-11-05 08:54:45 · 1713 阅读 · 0 评论 -
45 Float.NaN == Float.NaN 为 false 是怎么实现的?
呵呵 这是很久之前 看 jls 的时候就存在的疑惑, 当时写了 case 来看, 果然结论 和 jls 的规范是一致的但是 从来没有思考过 为什么会这样, 然后 具体又是 怎么实现的?回溯一下用例, 可以回溯到 2019 年, 但是 实际的应该还有 这个问题的更早的用例呵呵 今天就来看一下以下代码的截图, 调试基于 jdk8。原创 2022-10-29 10:02:47 · 885 阅读 · 0 评论 -
44 UseParallelGC的场景下 只发生了 minorgc, oldGen 里面却被占用了空间
呵呵 最近在某交流群里面 有同学提到了这样的一个问题最开始 我没有怎么注意, 但是 问题持续了两天, 呵呵 然后 花了一些时间看了一下Nerazzurri : 我看了个测试环境上部的应用的GC日志,看到有些信息不太明白,第一次YGC,堆占用空间和年轻代一样,那是说老年代没有被占用,第二次YGC就不一样,年轻代比堆少8K,第三次少16K,第三次少32K,不知道这些少的,是不是在老年代,而且这些数还是2的倍数,不知道是什么原因,不能仅仅是巧合吧,原创 2022-10-22 09:02:49 · 602 阅读 · 0 评论 -
43 多个相同限定名类型同时存在导致的继承结构混乱的情况
/ 四刷天府绿道呵呵 在前面文章中提到了这样的一个问题我们再看一下这里的 callback 的接口, jetty-runner 的这个对象里面是没有 void scan(Jar jar, String webappPath, boolean isWebapp), 抛出了异常当然 假设 jetty-runner 里面 JarScannerCallback 有这个方法, 又会不会出现问题呢?, 我们单开一篇文章讨论呵呵 这里就是来看这里的问题。原创 2022-10-16 19:15:16 · 307 阅读 · 0 评论 -
41 父类持有子类的引用多线程加载造成死锁问题
前言之前在 某技术交流群 中看到了这样的一个问题遇到一个没想明白的问题。一个类的静态字段是当前类的子类,多线程同时实例化该类和子类时,线程卡住。改问题的作者将问题记录在了他的 bloghttps://www.yuque.com/buildup/java/tzemks呵呵 这应该是几周之前的问题了, 拿出来 遛一遛如果 您知道 类初始化 的一些流程的话, 那这个问题 应该还是比较简单然后 我们这里调试一下 这里的具体的情况以下截图, 调试流程基于......原创 2022-06-04 10:01:20 · 259 阅读 · 0 评论 -
42 UseConcMarkSweepGC 的情况下 PrintTenuringDistribution 和 PrintGCDetails 的对象空间占用不一致的问题
前言呵呵 最近在清理 以前 todo 的时候发现了这样的一个问题PrintTenuringDistribution参数打印Survivor对象年龄分布是ygc前的情况还是ygc后这个问题 很有意思, 大概的情况就是 开启了PrintTenuringDistribution 来输出各个年龄的对象信息, 但是输出的对象空间占用 和 gc 之后的空间占用出现了不一致的情况看下面的日志输出, 这里是开启了PrintTenuringDistribution 和PrintGCDetails......原创 2022-06-11 10:32:43 · 1160 阅读 · 0 评论 -
40 classpath中存在多个jar存在同限定名的class classloader会如何加载
前言呵呵 最近碰到一些 老项目, 使用的传统的 libs 文件夹管理依赖,显然存在的问题就是 jar 的依赖的问题然后 之前呢, 也碰到了一些 依赖的相关问题1.异常:Class net.sf.cglib.core.DebuggingClassWriter overrides final method visit2.tomcat启动内存堆栈溢出ASN1EncodableVector,DEREncodableVector循环依赖然而 这些问题都需要确定一些事情, 才能够继续...原创 2022-05-28 10:21:26 · 756 阅读 · 0 评论 -
62 一次 Promotion failed 的调试
前言最近 有一个想法就是, 调试一下 DefNewGeneration 里面的晋升失败的情况呵呵 对于这块的代码上面, 看着感觉有一些疑问的地方, 因此想通过 实际的调试, 来验证一下 实际的情况然后 之前写了一个用例, 但是 和心中的期望差距甚大, 当然 主要的问题 还是自己对于 细节的把控不足, 参见一次 younggc fullgc 的调试因此 这次又来了, 当然 这个用例 在 vm 层面上做了一定的修改, 以方便 调试 "Promotion failed"以下代码...原创 2023-02-19 21:14:44 · 584 阅读 · 0 评论 -
39 很多代码无关的int[]来自于哪里
前言最近看到了这样的一个问题,在perfma 的论坛上面不起眼,但是足以让你有收获的JVM内存分析案例原问题的帖子是在为什么内存中存在很多代码无关的int[]数组?然后 我也吧这个测试用例复制下来了, 跑了一下, 看了看, 这里整理下一些 相关的收获以下的相关代码截图 基于 jdk8测试代码测试代码来自于, 问题原帖子, 这里做了一些小的调整package com.hx.test11;/** * Test30BigIntArray ...原创 2022-05-22 08:16:45 · 296 阅读 · 0 评论 -
38 一次 younggc fullgc 的调试
前言最近 有一个想法就是, 调试一下 DefNewGeneration 里面的晋升失败的情况呵呵 因此写了一个测试用例来调试这个场景, 但是 和我最开始的想法 差的有点远, 不过 还是有很大的收货, 这块的代码 虽然调试了很多次了, 但是 对于细节的把控 还是差的很多比如 这次的这个测试用例, 就和我心中的期望 差距很大以下代码, 截图 基于 jdk9测试代码package com.hx.test07;import org.openjdk.jol.v...原创 2022-05-15 09:02:04 · 401 阅读 · 0 评论 -
37 jstack 的输出结果分析
前言之前看到过这样的几篇帖子,dump 中 waiting on condition、parking to wait for 应该怎么理解是关于 jstack 的日志信息测试用例package com.hx.test07;import com.hx.test04.Test18DoubleCheckSingleton;import sun.misc.Unsafe;import java.util.concurrent.locks.LockSupport;/**...原创 2022-05-08 20:49:13 · 1484 阅读 · 0 评论 -
36 invoke static/special/virtual/interface
前言todo, 几个指令的使用场景, 占位符以下代码, 截图 基于 jdk9invokestatic请直接参照这篇文章 :方法调用的流程(invokestatic为例)直接获取的声明的类型上面的这个方法, 然后进行调用判断了一下 方法是否已经解析完成, 如果没有解析 则调用InterpreterRuntime::resolve_from_cache 触发解析然后 之后更新 rbx 为方法的 解析的目标地址, 然后 跳到给定的方法的 entry_po...原创 2022-05-04 12:49:56 · 323 阅读 · 0 评论 -
35 根据 InstanceKlass 查找 itable 的数据
前言vtable 的相关数据结构介绍 可以参见根据 InstanceKlass 查找 vtable 的数据itable 的数据结构的组合, 这里会介绍理解 vtable, itable 对于理解 invokevirtual, invokeinterface 是有帮助的, 进而对于 java 里面多态的具体实现方式, 也是一个基础以下调试 vm 部分基于 jdk9, HSDB 部分这里就不在赘述了, 参考根据 InstanceKlass 查找 vtable 的数据...原创 2022-05-01 10:27:24 · 267 阅读 · 0 评论 -
34 新增的 miranda 方法 & 新增的常量池 entry
前言 if (overpasses.length() > 0) { switchover_constant_pool(&bpool, klass, &overpasses, CHECK); merge_in_new_methods(klass, &overpasses, CHECK); }bb 00 43 59 12 45 b7 00 49 bfnew 00 43dupldc 45invokespecial 49athr..原创 2022-04-24 22:17:04 · 382 阅读 · 0 评论 -
33 根据 InstanceKlass 查找 vtable 的数据
前言之前(2020.05.17)在 hllvm 群组看到这样一篇文章, 呵呵 当时打了一个 todo, 是时候清理 todo 了在HSDB中查看instanceKlass中vtable的疑问?就是给你一个 InstanceKlass, 你怎么定位到 这个 Klass 对应的额 vtable 呢?本文主要是从两个方向来解释一个是 vm 调试, 另外一个是 根据 HSDB 来查询以下调试 vm 部分基于 jdk9, HSDB 部分基于 jdk8测试用例...原创 2022-04-17 19:22:46 · 767 阅读 · 0 评论 -
32 get/put + field/static 的调试
前言之前在 hllvm 群组看到了这样的一篇文章,[讨论] 有关实例化的内存分布呵呵 当时记录了一个 todo, 呵呵 这里就 跟一下 相关的代码吧根据 fieldName 找给定的字段, 找到偏移, 然后 在更新给定的对象给定的偏移的数据吧[todo] get_field, put_field 的相关字节码 可以看下一下内容基于 jdk9 + lldb-1001.0.13.3(lldb调试部分)测试用例package com.hx.test06;...原创 2022-04-09 20:41:34 · 704 阅读 · 0 评论 -
31 Method & ConstMethod 的内存布局
前言呵呵 R大的 经典文章 :借HSDB来探索HotSpot VM的运行时数据另外就是 文章中提到的 根据 Method 查看方法的字节码信息, 这部分也还是挺有趣的, 我应该是 之前整理在 文档上面了的吧, 借此机会整理一下测试用例package com.hx.test03;/** * CloneCallObjectConstructor * * @author Jerry.X.He <970655147@qq.com> * @version 1...原创 2022-04-02 20:46:17 · 331 阅读 · 0 评论 -
30 借HSDB来探索HotSpot VM的运行时数据
前言呵呵 R大的 经典文章 :借HSDB来探索HotSpot VM的运行时数据也来 动手实际过一次另外就是 文章中提到的 根据 Method 查看方法的字节码信息, 这部分也还是挺有趣的, 我应该是 之前整理在 文档上面了的吧, 多久整理一下测试用例package com.hx.test03;/** * HSDBInspectClass * * @author Jerry.X.He <970655147@qq.com> * @version ...原创 2022-03-27 08:06:31 · 383 阅读 · 0 评论 -
29 加载多个JdbcDriver造成死锁
前言最近看到了 这样的一篇文章[讨论]Class.forName()被阻塞, 进而导出了 你假笨 的一篇文章JDK的sql设计不合理导致的驱动类初始化死锁问题呵呵 这个还是挺有意思的, 我再 jdk7u40, jdk1.8.0_211 上面稳定复现但是 在 jdk9 上面, 就不会死锁了呵呵 对于这个问题, 这两天还是 尝试了很多的地方, 呵呵 麻蛋的 fastdebug 版本的 jdk 调试不了, 呵呵 可能编译记录的 源文件相关的信息 和我这里的场景 对不上吧文章...原创 2022-03-19 23:17:48 · 878 阅读 · 0 评论 -
28 关于 Finalizer
前言接前面几篇25 关于 Signal Dispatcher26 关于 Attach Listener27 关于 Reference Handler呵呵 关于常见的几个线程AttchListener,Signal Dispatcher, Reference Handler, Finalizer, 虽然 平时使用的不是很多吧, 但是 还是可以了解一下的这里 我们便来看一下Finalizer这个线程吧这个是 对象被 gc回收 处理之后, 需要回调的相关方法, 用...原创 2022-03-12 20:32:29 · 758 阅读 · 0 评论 -
27 关于 Reference Handler
前言接前面几篇25 关于 Signal Dispatcher26 关于 Attach Listener呵呵 关于常见的几个线程AttchListener,Signal Dispatcher, Reference Handler, Finalizer, 虽然 平时使用的不是很多吧, 但是 还是可以了解一下的这里 我们便来看一下Reference Handler这个线程吧呵呵 顾名思义, 引用处理, 关于 XXReference, 我这里之前 有几篇相关的调试的文章...原创 2022-03-05 21:47:00 · 1328 阅读 · 0 评论 -
26 关于 Attach Listener
前言接前一篇Signal Dispatcher,25 关于 Signal Dispatcher呵呵 关于常见的几个线程AttchListener,Signal Dispatcher, Reference Handler, Finalizer, 虽然 平时使用的不是很多吧, 但是 还是可以了解一下的这里 我们便来看一下Attach Listener 这个线程吧呵呵 这...原创 2022-02-26 19:44:13 · 1577 阅读 · 0 评论 -
25 关于 Signal Dispatcher
前言呵呵 最近看到一篇文章,[讨论]通过kill -3 pid 来输出Thread Dump日志信息的时效性呵呵 关于常见的几个线程AttchListener,Signal Dispatcher, Reference Handler, Finalizer, 虽然 平时使用的不是很多吧, 但是 还是可以了解一下的这里 我们便来看一下Signal Dispatcher 这个线...原创 2022-02-20 20:04:41 · 1076 阅读 · 1 评论 -
59 多线程环境普通变量作为标记循环不结束
前言最近看到这篇例子的时候,[讨论]内存可见性问题, 吧其中的 demo 拿到本地来跑居然 和楼主一样,testBasicType 这里面的这个子线程 居然 不结束了, 卧槽 我还以为 只是可能 用的时间稍微长一点哪知道 直接 无限期执行下去了, 然后 另外还有一个情况就是 加上了 -Xint, -Xcomp都能够 完成testBasicType 里面的线程的执行...原创 2023-01-30 19:51:58 · 696 阅读 · 0 评论 -
61 UseSerialGc的新生代回收调试
呵呵 很久之前看到这样的两篇文章在第一篇帖子中 R大 详细的讲述了 cheney 算法, 以及自己编写的 cheney 算法, 以及 DefNewGeneration 的具体的一些细节, 以及 和现有的例子的对比另外还有一些 关于 rember set 的一些 讨论呵呵 可以看出 R大 讨论到一些细节的时候, 在这篇文章中 似乎是真的有些兴奋了找了一下 记录, mac 上面能找到的是 今年3月, 但是 实际上应该还有更早的记录才对然后 当时写了一个 测试用例, 稍微调试了一下。原创 2023-02-11 10:17:24 · 491 阅读 · 0 评论 -
24 MagicAccessorImpl 可以访问所有的方法的调试
前言之前看到一篇文章,java 反射调用 private 相关里面 大佬大致截图 截了一下 为什么运行时生成的GeneratedMethodAccessor 可以访问所有的方法呵呵 说实话 这个问题 之前还没有考虑到但是 大佬的截图 说是话 还是有些抽象, 没有和具体的 运行时的来龙去脉 连接在一起呵呵呵 本文就来 理一下 这些东西本文 主要是以 反射调...原创 2022-02-12 19:31:39 · 595 阅读 · 0 评论