我有一個配置爲在OOM上創建內存轉儲的Tomcat應用程序服務器,它以-Xmx1024M啓動,因此應該有一個Gigabyte提供給他。內存轉儲比可用內存小得多
現在我發現了一個這樣的轉儲,它只包含260MB的未保留內存。垃圾場如何可能比他應有的規模小得多?
我有一個配置爲在OOM上創建內存轉儲的Tomcat應用程序服務器,它以-Xmx1024M啓動,因此應該有一個Gigabyte提供給他。內存轉儲比可用內存小得多
現在我發現了一個這樣的轉儲,它只包含260MB的未保留內存。垃圾場如何可能比他應有的規模小得多?
PermGen的空間是獨立的堆管理,並可以運行了,即使有足夠的可用內存整體。一些Web框架(特別是JSF)是真正的豬,並且很容易導致默認配置用完。可以用-XX增加:MaxPermSize = ### m
請記住系統空間受堆和permgen的總和限制,所以在開始獲取無法創建本機線程OOM例外之前,您可以佔用更少的總資源如果你不減少PermGen增加的數量。
只有關於分配內存使用情況的信息纔會被轉儲到文件中。 堆轉儲不是堆的二進制映像,它包含有關數據類型等的信息,可能會超出可用內存。
Heap Space或PermGen空間是內存不足異常嗎? – Affe 2010-05-11 05:34:22
+1 @Affe:好問題。出於某種原因,這個異常沒有記錄到日誌文件中,我也必須對此進行調查。 xprof轉儲是否也包含有關已加載類的信息,或僅包含有關堆中對象的信息? – Daniel 2010-05-11 07:27:40
@affe:你說得對,這是一個PermGen錯誤(今天早上在我的日誌中發現它)。請添加這個添加答案,以便我可以接受它。 – Daniel 2010-05-14 07:50:29