我们在tomcat6上运行了一个liferay门户,每个portlet都是一个包含的web应用程序,所以它包含了portlet本身所需要的所有库。我们目前有30+ portlets。这样做的结果是,我们部署的每个portlet都会增加tomcat的permgen。
我们现在有两条路可走。或者将每个portlet常用的一些库移动到tomcat共享库中。这将包括spring/hibernate/cxf/....减少我们的permgen大小或更容易的是增加permgen大小。
第二个选项允许我们将每个portlet保留为自包含的实体。
现在的问题是,增加permgen大小是否会对性能产生负面影响?我们目前的运行速度是512MB。我几乎没有找到关于这方面的信息。但发现一些帖子是人们正在讨论运行在1024MB的permgen大小没有问题。
发布于 2012-04-22 09:27:23
只要您的服务器上有足够的内存,我就无法想象会出什么问题。如果不这样做,那么Tomcat甚至不会启动,可能是因为它无法分配足够的内存。所以,如果它真的启动了,那你就没问题了。根据我的经验,1 1GB的PermGen是非常好的。
大型PermGen的缺点是留给您的系统内存较少,可以分配给堆(Xmx)。
另一方面,我建议您重新考虑将portlets视为自包含实体的好处。例如:
lib/ext
,那么从portlet库切换到portlet的lib
库只需要更改依赖范围(这对于portal库来说可能更烦人);就我记忆所及,Liferay SDK还可以很容易地与ant进行类似的切换,通过添加额外的ant任务来解决依赖关系,并根据需要从portlet的lib
中删除它们发布于 2012-04-22 09:50:33
PermGen内存可以通过完全收集进行垃圾收集,因此增加它可能会在发生完全收集时增加GC时间量。
不过,这些收集不应该进行得太频繁,而且通常情况下仍然需要不到一秒的时间来满GC 1 GC的永久内存-我只是从(我有点模糊的)内存中拉出这个数字,所以如果您真的担心GC时间,请自己进行一些计时测试(使用-verbose:gc
并阅读日志,更多详细信息here)
发布于 2014-10-20 20:39:32
Permgen大小不在旧Gen之外-所以请不要混淆。同意第二点-我们可以尽可能地增加permsize -因为内存非常便宜,但这会引发一些关于我们如何管理代码的问题。为什么我们需要这么多的perm -Is JTa来消耗这么多--我们加载了多少类?应用程序正在打开多少个文件描述符(使用lsof命令检查)。我们应该尝试回答这些问题。
https://stackoverflow.com/questions/10229378
复制相似问题