我们正在tomcat 6上运行liferay门户。每个portlet都是一个包含的Web应用程序,因此它包含了portlet本身所需的所有库。我们目前有30多个portlet。结果是我们的tomcat的permgen随着我们部署的每个portlet而增加。
我们现在有两条路可以遵循。 将每个portlet通常使用的一些库移动到tomcat共享库。这将包括像spring / hibernate / cxf / ....这样的东西来减少我们的permgen大小 或者更容易增加permgen大小。
第二个选项允许我们将每个portlet保持为一个自包含的实体。
现在的问题是,增加permgen大小会对性能产生负面影响吗?我们目前的运行速度为512MB。 我发现很少甚至没有关于此的信息。但是发现有些帖子是人们在谈论以1024MB permgen大小运行而没有问题。
答案 0 :(得分:3)
只要你的服务器上有足够的内存,我无法想象任何事情都可能出错。如果你不这样做,那么Tomcat甚至可能都不会启动,因为它无法分配足够的内存。所以,如果确实启动了,那你很好。就我的经验而言,1GB PermGen完美无缺。
大型PermGen的缺点是它会为您留下较少的系统内存,然后您可以为堆分配(Xmx)。
另一方面,我建议您重新考虑将portlet视为自包含实体的好处。例如:
lib/ext
libs切换到portlet的lib
库只需要更改依赖项范围(对于门户网站来说,这可能会更烦人);据我所知,Liferay SDK还可以通过添加额外的ant任务来解决依赖关系并根据需要从portlet的lib
中删除它,从而可以轻松地使用ant进行类似的交换以快速执行类似的切换。 LI>
答案 1 :(得分:1)
PermGen内存可以被完整集合垃圾收集,因此增加它可能会增加完整集合发生时的GC时间。
这些集合不应该经常发生,并且通常仍然需要不到一秒钟的完整GC 1GB的permgen内存 - 我只是从(我有些模糊的)内存中提取这个数字,所以如果你是真的很担心自己的GC时间到一些时间测试(使用-verbose:gc
并阅读日志,更多细节here)
答案 2 :(得分:0)
Permgen尺寸在OLD Gen之外 - 所以请不要混淆。 同意第二点 - 我们可以尽可能多地增加permsize - 因为内存相当便宜但这会引发一些关于我们如何管理代码的问题。为什么我们需要这么多烫发 - 这是JTa耗费那么多 - 我们要装多少班?应用程序打开了多少个文件描述符(使用lsof命令检查)。 我们应该尝试回答这些问题。