以下表示对大量内存的传入引用,在 WebSphere 6 中发生 OutOfMemoryException 之后,在主堆转储文件中可以看到:
Class Name | Shallow Heap | Retained Heap
-------------------------------------------------------------------------------------------------------------
| |
java.util.HashMap$Entry[1048576] @ 0xbd42d00 | 4,194,320 | 122,167,192
'- java.util.HashMap @ 0x1044918 | 48 | 122,167,240
'- class com.ibm.ejs.j2c.ConnectorRuntime @ 0x15871128 | 28 | 122,167,356
|- org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader @ 0x133fa48 | 96 | 191,140
|- class com.ibm.ejs.j2c.RALifeCycleManagerImpl @ 0x15834ea0 | 28 | 108
|- class com.ibm.ejs.j2c.ConnectorRuntime @ 0x15871128 | 28 | 122,167,356
|- class com.ibm.ejs.j2c.PoolManager @ 0x158723d8 | 28 | 2,028
|- class com.ibm.ejs.j2c.RAWrapperImpl @ 0x15875eb0 | 28 | 1,612
|- class com.ibm.ejs.j2c.XMLReader @ 0x15e6ef88 | 28 | 156
|- class com.ibm.ejs.j2c.ConnectionFactoryRefBuilderImpl @ 0x15ed5468 | 28 | 140
|- class com.ibm.ejs.j2c.ConnectionFactoryDetailsImpl @ 0x15efc758 | 28 | 201,060
|- class com.ibm.ejs.j2c.ResourceAdapterDDImpl @ 0x1605ce60 | 28 | 220
|- class com.ibm.ejs.j2c.ConnectorPoolProperties @ 0x1605d900 | 28 | 972
|- class com.ibm.ejs.j2c.ConnectionManager @ 0x163eea78 | 28 | 196
|- class com.ibm.ejs.j2c.XATransactionWrapper @ 0x163f0a30 | 28 | 28
|- class com.ibm.ejs.j2c.ConnectionFactoryBuilderServerImpl @ 0x16431540| 28 | 364
|- class com.ibm.ejs.j2c.DefaultSecurityHelper @ 0x16434800 | 28 | 28
|- class com.ibm.ejs.j2c.MCWrapper @ 0x165542a0 | 28 | 764
|- class com.ibm.ejs.j2c.PoolManager$GetJ2CProperties @ 0x16577758 | 28 | 28
|- class com.ibm.ejs.j2c.SharedPool @ 0x16578100 | 28 | 28
|- class com.ibm.ejs.j2c.FreePool @ 0x165787f0 | 28 | 28
|- class com.ibm.ejs.j2c.CMConfigDataImpl$GetJ2CProperties @ 0x16977b30 | 28 | 28
'- Total: 19 entries | |
-------------------------------------------------------------------------------------------------------------
我没有全部检查过,但是哈希图条目似乎都具有空值。
这可能是什么原因造成的?如何获取更多信息?
答案1
解决方案是:Increased max heap size for server from 256 to 768MB. Also enabled garbage collection logging.
答案2
如果您正在使用 Oracle,那么问题可能出在 Oracle 连接池内存消耗上。
看到这个白皮书,特别是有关设置oracle.jdbc.implicitStatementCacheSize
参数的部分。