我有一个Web应用程序部署在Oracle应用服务器10.1.3中,oc4j以1Gb初始堆和2 Gb最大堆为开始,位于32位RHEL上,配置为查看32 Gb的RAM。 最近我遇到了OutOfMemory错误,所以我配置了应用程序在OutOfMem上创建堆转储。所以我有4-5个堆转储,每个转储大小不超过1.2 Gb(因此比最大堆大小小800 Mb)。另外,平均每小时在机器上免费使用约20Gb的免费内存。java OutOfMemory问题 - 堆转储配置的最大堆小于800 Mb
这是否意味着应用程序试图一次性分配800 Mb?或者如果有2个或更多的线程同时尝试分配内存,那么它们都会失败,即使我们假设每个内存都有内存,但是并不是两者的总和?可能有一个与Linux机器的PB,也许它不能给Java内存?内存是否可以被碎片化,也许允许32位机器看到32 Gb内存的配置有pb?
(我应该提及的是,应用程序没有最新修改,但是这台机器上一个新的OC4J和新应用程序部署laely,而吃RAM的1-2G)
根据suraj的回答,如果perm gen正在吃更多的空间,那么你有很强的参考objects.can你张贴堆转储。 – 2011-03-18 10:09:42