glibc是什么_这是什么重大发现!一个导致JVM物理内存消耗大的Bug

本文讲述了在排查JVM内存泄露过程中,发现的一个可能导致大量物理内存消耗的Bug。该Bug与glibc的64M内存分配机制有关,并涉及到C2 CompilerThread0。通过分析,揭示了glibc的arena机制和环境变量MALLOC_ARENA_MAX的作用。同时,指出了JVM中nmethod::metadata_do方法的循环分配可能导致内存无法复用的问题,尤其是在频繁的Class Retransform或Redefine场景下。已将问题反馈给社区,并有望在OpenJDK的后续版本中得到修复。
摘要由CSDN通过智能技术生成
2412581bd1383d9ac1cf0f79e718c7d4.png

概述

最近我们公司在帮一个客户查一个JVM的问题(JDK1.8.0_191-b12),发现一个系统老是被OS Kill掉,是内存泄露导致的。在查的过程中,阴差阳错地发现了JVM另外的一个Bug。这个Bug可能会导致大量物理内存被使用,我们已经反馈给了社区,并得到快速反馈,预计在OpenJDK8最新版中发布(JDK11中也存在这个问题)。

d90f4707c8f922f73142a05c7db8d328.png

PS:用户的那个问题最终也解决了,定位下来算是C2的一个设计缺陷导致大量内存被使用,安全性上没有得到保障。

找出消耗大内存的线程

接下来主要分享下这个BUG的发现过程,先要客户实时跟踪进程的情况,当内存使用明显上升的时候,通过/proc//smaps,看到了不少64MB的内存分配,Rss也基本消耗完了。

7fd690000000-7fd693f23000 rw-p 00000000 00:00 0 Size:              64652 kBRss:               64652 kBPss:               64652 kBShared_Clean:          0 kBShared_Dirty:          0 kBPrivate_Clean:         0 kBPrivate_Dirty:     64652 kBReferenced:        64652 kBAnonymous:         64652 kBAnonHugePages:         0 kBSwap:                  0 kBKernelPageSize:        4 kBMMUPageSize:           4 kBLocked:                0 kBVmFlags: rd wr mr mw me nr sd 7fd693f23000-7fd694000000 ---p 00000000 00:00 0 Size:                884 kBRss:                   0 kBPss:     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值