首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清除Liferay中的布局缓存

如何清除Liferay中的布局缓存
EN

Stack Overflow用户
提问于 2012-11-27 10:14:40
回答 3查看 4.8K关注 0票数 0

我对我的Liferay Cache有意见。

场景:我正在使用 API读取一个文件并将布局导入到Liferay。

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

OutofMemoryException.问题:当我导入大约5000个布局时,会得到一个我可以通过EhCache object找到保留最多的堆空间。(它使用我的大型排版保存LayoutCacheModel )

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

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

谢谢,

斯比

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-06 13:09:22

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

LayoutPersistenceImpl.java

代码语言:javascript
复制
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);
}

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

票数 0
EN

Stack Overflow用户

发布于 2012-11-27 10:22:28

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

此外,您应该查看利费莱网站的性能调优门户(虽然我不确定您正在使用的版本)。

考虑到您已经配置了JVM设置,您可以考虑在X加载之后刷新ehcache (我仍然建议您在>1加载之后刷新它,而不是每次加载)。您可以使用以下内容获得CacheManager的句柄并刷新它:

代码语言:javascript
复制
CacheManager manager = CacheManager.getInstance();
manager.removalAll();

我从来没有在Liferay做过这件事,但是我认为这可能还是有一些好处的。

票数 0
EN

Stack Overflow用户

发布于 2012-11-29 12:42:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13581908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档