内存问题分析

时间:2011-01-12 19:06:18

标签: java grails out-of-memory

编辑 - 所以看了JVisualVM中的Cache#15和MemoryStore#9。原来它是查询缓存。希望在conf中删除缓存配置,将查询缓存限制为少于10k项(默认值)将解决此问题...


我们在tomcat 6x上部署了Grails应用程序(v1.2.0)。经历过OOM崩溃。获得堆转储并开始在JVisualVM中进行分析。这就是我所看到的 alt text

这个 alt text

这么多的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空间错误就消失了。

3 个答案:

答案 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配置错误。