0

我有多个使用相同框架的 portlet,并且我曾经将这些依赖项与每个 portlet 一起部署,这会导致 PermGen 问题,尤其是在我为 portlet 部署/取消部署时。

有时即使没有部署/取消部署,这个问题也会突然出现。

我正在考虑将这些依赖项移动到 tomcat 级别,但它会与使用它的版本 liferay 冲突。

这是我的 JVM 参数:

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false -Duser.timezone=GMT -Djruby.min.runtimes=1 -Djruby.max.runtimes=3 -Djruby.runtime=1 -XX:NewSize=700m -XX:MaxNewSize=700m -Xms2048m -Xms2048m -XX:MaxPermSize=512m  -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=10 -XX:ParallelGCThreads=8"

还有其他推荐的解决方案吗?

4

1 回答 1

0

Liferay 6.1 在其根 portlet 中使用 Spring 3.0.7。

如果您将它们配置为 in 中的依赖项portal-dependency-jarsliferay-plugin-package.properties这些将被复制到您的 portlet 中,因此很像您自己包含它们。当然,您在 portlet 中包含的任何库都会增加您对 PermGen 空间的使用。

在 Tomcat 中放置不同的 Spring 和 Hibernate 库可能会导致类加载问题。由于 Hibernate 4.x 不能很好地与早于 3.1 的 Spring 配合使用,因此您遇到了一些问题。您可以尝试在根 portlet 中升级 Spring。就我个人而言,我从来没有让它发挥作用。

我会增加 PermGen 空间并将库放在您的 portlet 中。META-INF/context.xml此外,在你的战争中,如果你使用的是 Tomcat ,你可能想把它放进去。

<Context>
    <Loader loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader" />
</Context>

这可能会解决一些类加载问题。在某些情况下,它没有任何区别,但如果您使用单独的库,它可能很重要。

于 2013-04-03T13:27:10.410 回答