Java 如何在Liferay中清除布局缓存
我的Liferay缓存有问题 场景: 我正在读取一个XML文件,并使用Liferay API将布局导入到我的Liferay DB中 版面的类型设置列中存储了大量数据 问题: 当我导入大约5000个布局时,我会得到一个OutofMemoryException。 我可以找到保留最多的堆空间是通过EhCache对象。 (其中包含LayoutCacheModel和我的大型字体设置) 每次布局导入后清除缓存是一个好主意吗 如果是,如何清除特定于布局的缓存。(我正在使用Liferay 6.0) 谢谢Java 如何在Liferay中清除布局缓存,java,caching,layout,liferay,Java,Caching,Layout,Liferay,我的Liferay缓存有问题 场景: 我正在读取一个XML文件,并使用Liferay API将布局导入到我的Liferay DB中 版面的类型设置列中存储了大量数据 问题: 当我导入大约5000个布局时,我会得到一个OutofMemoryException。 我可以找到保留最多的堆空间是通过EhCache对象。 (其中包含LayoutCacheModel和我的大型字体设置) 每次布局导入后清除缓存是一个好主意吗 如果是,如何清除特定于布局的缓存。(我正在使用Liferay 6.0) 谢谢 Se
SeBi
在查看FLASH EHCHACE之前(可能最好不要在每个导入之后,而是在几百次之后),查看您所拥有的JVM设置,并考虑增加分配给运行门户的JVM的最大堆大小。例如-Xms1024m-Xmx1024m-XX:MaxPermSize=128m
此外,您应该在网站上查看门户的性能调优(尽管我不确定您使用的是什么版本) 鉴于您已经配置了JVM设置,您可以查看在加载X之后刷新ehcache(我仍然建议您在加载>1次之后刷新它,而不是每次加载)。您可以通过以下操作获得CacheManager
的句柄并刷新它:
CacheManager manager = CacheManager.getInstance();
manager.removalAll();
我自己在Liferay中从未这样做过,但我认为这可能仍然有一些好处。您也可以配置缓存大小,而不是完全清空缓存。监视JMX数据以确定实际缓存的大小,并根据需要采用。缓存配置的一些文档是,我希望在《用户指南》中提供更多文档。与@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);
}
我必须手动复制此代码,因为它不能作为服务提供。谢谢您的回答。不,这是作为间隔作业完成的。基本上,我不需要在成功导入后由缓存维护布局。(我已经配置了最大堆大小)你好,Olaf…谢谢你的回答。这正是我现在想要做的。但是,在中,我们如何配置缓存大小?我只能在记忆中找到MaxElement(