编辑 - 所以看了JVisualVM中的Cache#15和MemoryStore#9。原来它是查询缓存。希望在conf中删除缓存配置,将查询缓存限制为少于10k项(默认值)将解决此问题...
我们在tomcat 6x上部署了Grails应用程序(v1.2.0)。经历过OOM崩溃。获得堆转储并开始在JVisualVM中进行分析。这就是我所看到的
这个
这么多的ehcache东西,肯定有很多字节和字符数组。我已经尝试使用谷歌搜索'grails memory leak ehcache',但没有任何明确的结果。有没有人看到过这样的问题,或者对可能造成这种情况有什么见解?这可能是一个配置错误的ehcache吗?
我们正在使用各种插件(acegi,quartz,mail,background-thread),所有最新版本的FOR grails版本1.2.0。
编辑 - 更多信息
使用以下
启动tomcat-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -d64 -server -XX:+HeapDumpOnOutOfMemoryError -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
,错误是
java.lang.OutOfMemoryError: Java heap space
有趣的是,我们曾经得到与perm gen空间相关的错误,但是当我更新到上面显示的Java配置时,permgen空间错误就消失了。
答案 0 :(得分:2)
拥有大量字符串和char []是正常的。我会尝试更正ehcache配置...显然你缓存了很多。有些选项可以将缓存转储到磁盘上,也许这是您的解决方案。
编辑:由于-XX:MaxPermSize=256m
,PermGen消失了,这几乎就是。
答案 1 :(得分:1)
你可能会耗尽烫发空间,而不是堆积。
将GC记录到文件并链接,并回发您的JVM参数。
答案 2 :(得分:0)
您使用的是Grails 1.2.0还是1.2.5(最新的1.2.x)?最新的稳定版是1.3.6 ..我认为问题是ehcache配置错误。