求助>JDK6环境下进程永久区内存溢出>
3回复
2周前

JDK6环境下进程永久区内存溢出



1.问题描述
JDK6环境下一后台进程永久区内存溢出。

2.做过的分析
在进程正常运行时,用jmap -perstat取了2次dump进行对比。
结论为:Intern strings存在显著增长,而类的容量基本维持不变。
同时我们尝试在测试环境复现,但未复现出Perm内存溢出。

3.求助:如何定位什么程序导致了Inern strings的增长?
不知道有没有方法,能在线上诊断这个问题。

4.jmap -perstat获取信息:
Attaching to process ID 90362, please wait…
Debugger attached successfully.
Server compiler detected.
JVM version is 20.4-b02
1228626 intern Strings occupying 179718920 bytes.
finding class loader instances …Finding object size using Printezis bits and skipping over…
Finding object size using Printezis bits and skipping over…
Finding object size using Printezis bits and skipping over…

done.
computing per loader stat …done.
please wait… computing liveness…liveness analysis may be inaccurate …
class_loader classes bytes parent_loader alive? type

<bootstrap> 1747 10475200 null live <internal>
0x0000000780add9d0 1 3104 null dead sun/reflect/DelegatingClassLoader@0x00000007600675e8
0x00000007811eacc0 1 3088 0x00000007809af1d8 dead sun/reflect/DelegatingClassLoader@0x00000007600675e8
<>
total = 118 4072 29170752 N/A alive=4, dead=114 N/A

2005 阅读
请先登录,再评论

回复列表

你假笨2周前

按照我的经验,一般是一些序列化反序列化的操作导致的😁

赵海2周前
回复你假笨:

好,谢谢,我们先分析下这个因素

回复

2. 同时我们尝试在测试环境复现,但未复现出Perm内存溢出。
-------
这个是不是因为未设置相关的 JVM 参数?
============

3. 如何定位什么程序导致了Inern strings的增长?
--------
可以尝试采用字节码增强的方式增强 String intern(); 方法,并获取其调用栈,就知道是什么线程导致的Inern strings增长了。