大型Permgen尺寸+性能影响

use*_*117 8 java portal permgen liferay tomcat6

我们在tomcat 6上运行liferay门户.每个portlet都是一个包含的Web应用程序,因此它包含了portlet本身所需的所有库.我们目前有30多个portlet.结果是我们的tomcat的permgen随着我们部署的每个portlet而增加.

我们现在有两条路可以遵循.将每个portlet通常使用的一些库移动到tomcat共享库.这将包括像spring/hibernate/cxf/....这样的东西来减少我们的permgen大小或更容易增加permgen大小.

第二个选项允许我们将每个portlet保持为自包含的实体.

现在的问题是,增加permgen大小会对性能产生负面影响吗?我们目前的运行速度为512MB.我发现很少甚至没有关于此的信息.但发现一些帖子的人都在谈论以1024MB permgen大小运行而没有问题.

Mic*_*l M 3

只要您的服务器上有足够的内存,我无法想象会出现任何问题。如果不这样做,Tomcat 甚至可能无法启动,因为它无法分配足够的内存。所以,如果它确实启动了,那就好了。就我的经验而言,1GB PermGen 是完美的。

大 PermGen 的缺点是,它留给您分配给堆 (Xmx) 的系统内存较少。

另一方面,我建议您重新考虑将 portlet 视为独立实体的好处。例如:

  • 互操作性问题:如果允许所有 portlet 潜在地使用同一库的不同版本,则存在它们无法按预期相互协作以及与门户本身协作的风险
  • 性能:PermGen 占用空间只是一回事,但在 portlet 中到处添加 jar 将需要额外的文件描述符;我不了解Windows,但是从长远来看这会损害Linux服务器的性能。
  • 更改自由:如果您使用 Maven 来构建 Portlet,从lib/ext库切换到 Portlet 的lib库只需更改依赖项范围(这对于门户库来说可能更烦人);据我记得,Liferay SDK 还可以轻松地使用 ant 进行类似的切换,通过添加额外的 ant 任务来解决依赖关系并根据需要从 portlet 中删除它们,从而快速完成类似的lib切换