我正在运行一个应用程序,其中有4个最大堆大小-Xms4096m -Xmx4096m -Xmn1024m
,GC配置为-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=50
且GC间隔为Dsun.rmi.dgc.server.gcInterval=43200000 -Dsun.rmi.dgc.client.gcInterval=43200000
突然我的应用程序转到堆内存异常,我在同一场合进行了线程转储和堆转储。在分析线程转储时,由于为hashMap和arrayList创建了一些值,线程会被卡住。 ByteArrayOutStream已经在其中一个线程中创建了锁。
在eclipse内存分析器工具中分析Heap转储时,它清楚地表明bytearray对象占用了几乎1 Gigs of Heap。从GCViewer可以看出它的峰值只有几分之一秒。我很清楚为什么突然Byte数组对象使用1 Gigs的空间。有人可以帮助我缩小罪魁祸首。
- Application Server - Weblogic 12c
答案 0 :(得分:0)
在eclipse内存分析器工具中分析Heap转储时,它清楚地表明bytearray对象占用了近1 Gigs的堆。
使用MAT的GC根特征的最短路径来查看哪些引用保留在该字节数组上。