如何在Liferay中清除我的布局缓存

时间:2012-11-27 10:14:41

标签: java caching layout liferay

我的Liferay缓存存在问题。

情景: 我正在阅读一个XML文件,并使用Liferay API将布局导入我的Liferay数据库。

布局的 typeSettings 列中存储了大量数据。

问题: 当我导入大约5000个布局时,我得到 OutofMemoryException 。 我可以通过 EhCache对象找到最保留的堆空间。 (它包含我的巨大排版的LayoutCacheModel)

在每次布局导入后清除缓存是否是个好主意?

如果是这样,我如何清除特定于布局的缓存。 (我正在使用 Liferay 6.0

谢谢,

Siby

3 个答案:

答案 0 :(得分:0)

在您查看刷新ehcache之前(可能最好不要在每次导入后而不是每几百次之后执行此操作),查看您拥有的JVM设置并考虑增加分配给运行门户的JVM的最大堆大小。例如。 -Xms1024m -Xmx1024m -XX:MaxPermSize = 128m

此外,您应该查看Liferay's网站以了解门户网站的性能(虽然我不确定您使用的是哪个版本)。

鉴于您已经配置了JVM设置,您可以在X加载后查看刷新ehcache(我仍然建议您在> 1加载后刷新它而不是加载)。您可以使用以下内容获取CacheManager的句柄并将其刷新:

CacheManager manager = CacheManager.getInstance();
manager.removalAll();

我自己从未在Liferay中做过这件事,但我认为它可能仍然有一些好处。

答案 1 :(得分:0)

您也可以配置缓存大小,而不是完全清空缓存。监视JMX数据以确定实际缓存的大小,并根据您的需要采用。缓存配置的一些文档是https://www.liferay.com/community/wiki/-/wiki/Main/ehCache+Configurationhttps://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Liferay+Caching+%28EhCache%29 - 我希望在用户指南中提供更多文档。

答案 2 :(得分:0)

@ramsinb 给出的答案类似,我可以使用以下代码清除缓存:

<强> LayoutPersistenceImpl.java

public void clearCache() {
    if (_HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE) {
        CacheRegistryUtil.clear(LayoutImpl.class.getName());
    }

    EntityCacheUtil.clearCache(LayoutImpl.class.getName());
    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
}

我不得不手动复制此代码,因为它不可用作服务。