我对我的Liferay Cache有意见。
场景:我正在使用 API读取一个文件并将布局导入到Liferay。
有大量数据存储在布局的typeSettings列中。
OutofMemoryException.问题:当我导入大约5000个布局时,会得到一个我可以通过EhCache object找到保留最多的堆空间。(它使用我的大型排版保存LayoutCacheModel )
在每个布局导入之后清除缓存是个好主意吗?
如果是,我如何清除特定于布局的缓存。(我正在使用Liferay 6.0)
谢谢,
斯比
发布于 2013-02-06 13:09:22
与@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);
}我不得不手动复制这段代码,因为它作为服务不可用。
发布于 2012-11-27 10:22:28
在查看刷新ehcache之前(最好不要在每次导入之后,而是在每隔几百次导入之后),查看一下您拥有的JVM设置,并考虑增加分配给运行门户的JVM的最大堆大小。例如-Xms1024m -Xmx1024m -XX:MaxPermSize=128m
此外,您应该查看利费莱网站的性能调优门户(虽然我不确定您正在使用的版本)。
考虑到您已经配置了JVM设置,您可以考虑在X加载之后刷新ehcache (我仍然建议您在>1加载之后刷新它,而不是每次加载)。您可以使用以下内容获得CacheManager的句柄并刷新它:
CacheManager manager = CacheManager.getInstance();
manager.removalAll();我从来没有在Liferay做过这件事,但是我认为这可能还是有一些好处的。
发布于 2012-11-29 12:42:27
您也可以配置缓存大小,而不是完全清空缓存。监视JMX数据以确定实际缓存的大小,并根据需要采用。一些关于缓存配置的文档是https://www.liferay.com/community/wiki/-/wiki/Main/ehCache+Configuration和https://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Liferay+Caching+%28EhCache%29 --我希望在“用户指南”中提供更多。
https://stackoverflow.com/questions/13581908
复制相似问题