2015-02-05 47 views
0

我在tomcat上的兩個不同的服務器上運行了一個web應用程序的兩個實例。當我通過多播添加會話複製配置時,它會在接下來的五分鐘內給我發生permgen錯誤(我只有兩個活動會話)。但在這五分鐘內,一切看起來很正常:一臺服務器中的會話被成功複製到另一臺服務器。當我沒有多播設置時,我沒有看到permgen問題。多播時發生Permgen錯誤

任何想到爲什麼多點傳輸只消耗兩個會話的所有可用內存?

回答

0

Permgen用於存儲有關類的元數據。它不受這些類的實例數量的影響。會話的數量(即實例)可能無關緊要。這很可能是使用(也可能動態生成)類來支持會耗盡電源的會話複製的簡單行爲。

開始通過明確設置MaxPermSize property來增加燙髮的尺寸。

考慮轉移到jdk 8,它改變了管理元數據的方式。

http://java.dzone.com/articles/java-8-permgen-metaspace

+0

Thanks Brett。 類用於支持會話複製的次數與複製的活動會話數成正比。所以它耗盡了PermGen。說得通。當我查看活動會話的數量時,當沒有用戶在線時,其中有1500個。所有會話都是0字節大小。一個會話每分鐘創建2個屬性。他們是'_psiprobe_la_ip'和'_lambda_probe_la_ip'。我不知道爲什麼。我們使用psi探針工具進行tomcat管理。此工具每分鐘創建一次會話嗎? – 2015-02-08 04:41:44

+0

否 - ** 1 ** java.lang.Class爲特定類實例,無論該類有多少個實例(忽略例如在同一個JVM中具有相同類的多個Web應用程序)。只有java.lang.Class存儲在PermGen中,而不是對象實例。隨意查看[本博客系列](http://java.jiderhamn.se/2011/12/11/classloader-leaks-i-how-to-find-classloader-leaks-with-eclipse-memory - 分析器 - 墊/)如何找到泄漏,和[這個我的圖書館](https://github.com/mjiderhamn/classloader-leak-prevention),可以幫助你避免這個問題。 – 2015-02-16 13:05:38