我们运行一个基于Java的大型应用程序,该应用程序正处于重大开每隔3到6个月,似乎我们必须增加PERM内存的大小,否则我们可能会在应用程序启动时或上线后不久耗尽内存。该应用程序托管在JBoss 4.2和tomcat服务器中。
我们目前的设定是:
-server -Xms12G -Xmx12G -XX:MaxPermSize = 1536M -XX:+ UseConcMarkSweepGC -XX:+ CMSIncrementalMode
我可以帮忙,但想知道这看起来是否非常糟糕。
PERM内存似乎在启动时很快就会填满。使用jstat在90到99%之间。
我们的网络应用程序包含30个单独的战争文件。在JBoss中,这些部署为一个300MB以上的大型耳机文件。
对于我们这么多PERM的大型申请来说,这是正常的吗?
答案 0 :(得分:6)
这是很多permgen空间。如果它立即填满,这意味着几乎不可思议的课程数量。这30个战争文件中的库中是否存在大量重复内容?您可以通过从靠近根的公共类加载器加载公共库来节省大量空间,而不是在每个单独的webapp中加载。尝试在服务器目录中安装公共库。
答案 1 :(得分:0)
管理12 GB堆以及类代码/静态数据的1.5 GB开销真是太过分了吗?
答案 2 :(得分:0)
您是否认为应用程序中可能存在内存泄漏?尝试使用JProfiler或Eclipse MAT等分析器工具来分析应用程序的内存使用情况。我已经看到,简单的内存泄漏会在一段时间内造成巨大的中断。