分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

栏目: Java · 发布时间: 5年前

内容简介:老早之前写过一篇文章,关于attach机制的,可以看下这篇老文章了解一下这个问题从昨天晚上定位到今天早上发给OpenJDK社区,很快就得到了社区的BUG确认,是一个新的BUG(Bug详情,可以点击原文阅读),至此我厂给OpenJDK社区贡献了4个BUG及Patch了,如果有这块兴趣的同学欢迎联系我们(微信:PerfMa)一起给社区做一些力所能及的事情。

概述

老早之前写过一篇文章,关于attach机制的,可以看下这篇老文章了解一下 JVM源码分析之Attach机制实现完全解读 ,比如大家常用的jstack,jmap等 工具 的主要原理都和attach机制有关,在JVM里处理这些命令的线程主要是 Attach Listener 这个线程,这个线程在JVM里是唯一的,我之前也一直以为是唯一的,但是我们同事最近在做一个线程分析产品的时候,发现我们抓到了多个 Attach Listener 线程,这让我也很疑惑,我第一感觉是不可能,肯定是数据抓错了,直到亲眼看到了两个同名的 Attach Listener 线程我才不得不相信原来还真有这种情况。

这个问题从昨天晚上定位到今天早上发给OpenJDK社区,很快就得到了社区的BUG确认,是一个新的BUG(Bug详情,可以点击原文阅读),至此我厂给OpenJDK社区贡献了4个BUG及Patch了,如果有这块兴趣的同学欢迎联系我们(微信:PerfMa)一起给社区做一些力所能及的事情。

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

问题分析

不过从 Attach Listener 的实现来看,它设计的初衷不应该是一个多线程的设计,于是我昨晚上又翻了一遍代码,发现还真可能存在这种情况。举个栗子,当我们很多人同时执行jstack的时候,就可能会发生,当然有个前提是之前都没有做过任何和attach相关的操作。

Attach Listener 线程默认情况下不会在JVM启动的时候就创建,当然也有一个JVM参数可以指定在JVM启动的时候就启动这个线程,这个就不会存在我们今天讨论的这个问题了,这个JVM参数是 -XX:+StartAttachListener

当我们在运行时触发attach机制的时候,首先会通过 Signal Dispatcher 线程来创建 Attach Listener 线程,代码如下:

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

在上面的圈起来的init方法里会创建 Attach Listener 线程,但是在init方法执行之前会通过 _initialized 属性来判断是否需要创建线程,而 _initialized 设置为true是在 attach_listener_thread_entry 里,这个是 Attach Listener Thread 的entry,也就是当这个线程执行的时候执行的方法。

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

但是在设置 _initialized=true 之前,如果有多个请求信号发出了(比如同时又很多jstack命令触发),可能会创建多个 Attach Listener ,因为 Signal DispatcherAttach Listener 线程是异步执行的。

问题复现

为了让效果更明显,我们可以在hotspot里修改下代码重新编译下再跑demo

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

在上面函数里加上圈起来的这段代码,表示在设置 _initialized 属性之前停留15s,当进程起来之后,不断执行 jstack <pid> ,最终将会看到有非常多的 Attach Listener 线程

分享一个新出炉的 JVM 里不痛不痒的 Bug (Attach 机制相关)

其实问题的根本就是有一个空档期(设置 _initialized 为true之前)可能存在多次创建线程的可能。

总结

总的来说,创建 Attach Listener 线程是通 过Signal Dispatcher 线程来创建的,但是决定 Signal Dispatcher 是否可以重复创建 Attach Listener 线程的标记是在某个 Attach Listener 线程里设置的,如果没有及时设置该标记,就可能存在创建多个 Attach Listener 线程的情况。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

流量的秘密

流量的秘密

(英)Brian Clifton / 钟镭 / 人民邮电出版社 / 2010-2 / 45.00元

你对自己的网站有足够的了解吗?你知道自己网站的真实影响力和竞争力吗?你在想尽办法留住你的访客吗?《流量的秘密:Google Analytics网站分析与优化技巧》将运用最新的网络计量学方法,教你获取真正有价值的信息。 哪种市场营销活动最有成效?如何量化这些效果?应该从哪些衡量指标进行追踪?《流量的秘密:Google Analytics网站分析与优化技巧》介绍的Google Analytics......一起来看看 《流量的秘密》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具