我有一個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