Grails内存问题

时间:2011-05-25 04:25:51

标签: grails

我是刚开始探索Grails的新手,所以我可以推荐这个 我们工作中的项目的伟大框架。在学习的同时我正努力 在ubuntu上使用Grails 1.3.7创建应用程序的原型,

当我在几分钟后运行应用程序时,我的系统挂起并且系统监视器 表明它消耗的内存超过了一大堆。我只是在经营一家 浏览器和终端,甚至没有netbeans或eclipse。

我认为这可能是因为内存中的hsql db,但是我配置了 mysql甚至然后它的内存问题相同。我的申请非常 简单的几种形式,我使用弹簧安全,jms和搜索 插件,仅此而已。

我真的很感激任何会改善记忆的建议 问题,否则我将不得不放弃这个框架。作为开发人员我 感到难过,因为我会错过这样精彩的框架 关于这个问题。

我的电脑有2个内存,只运行Chrome浏览器和终端。此外,我只有一个控制器,我只有几个域。

请提供一步一步的说明,以便改进,因为我对此完全陌生

感谢您阅读

5 个答案:

答案 0 :(得分:3)

去年我将第一个大型grails应用程序部署到生产环境时,我遇到了一些Grails和高内存使用问题。我的应用程序执行了大量的数据库选择,插入,删除和更新,并且每分钟执行大约10000个数据库,大约有100个活动会话/用户。

对于开发我用1024M HEAP做得很好。但是当部署到生产内存时,使用量增加很多。我在几分钟内就得到了OutOfMEmory异常。我做的第一件事是将HEAP大小增加到2048M,应用程序现在运行一周,然后再次抛出OutOfMemoryError异常。我还使用了-XX:+ UseConcMarkSweepGC垃圾收集器。

我猜测有一些内存泄漏,但我无法弄明白。所以我安装了 Java Melody plugin监视内存使用情况。我还使用JVisualVM来找出可能占用所有内存的对象类型。

经过几天的监控后发现没有内存泄漏,但是内存使用情况出现了一些尖峰。此时的平均内存使用量约为1200MB。我再次将HEAP增加到3072M,现在尖峰永远不会使用比可用的HEAP更多的HEAP,但尖峰可能会使用高达2800MB的内存。

我的应用程序现在稳定,可以运行数月而不会出现任何问题。然而,内存使用量仍然很高,我已经做了一些工作,以改善这一点。有两件事确实有助于减少内存使用量。

第一个很简单,禁用hibernate二级缓存。如果您有经常更改的数据,这已知会有所帮助。对我来说,这也略微改善了整体性能。这可以在grails-app / conf / DataSource.conf

中完成
cache.use_second_level_cache=false
cache.use_query_cache=false

我做的第二件事是调整Searchable plugin。我开始返回一千次点击,现在最大命中数是百。

这两项调整将峰值降低了约75%。我还做了很多与查询相关的微小调整,特别是减少了查询返回的数据量。 例如,我有一个名为Issue的域类,有20多个属性,但在渲染到视图时我只需要一些属性。可以将结果转换为这样的地图:

Issue.executeQuery(
    "select new map(i.id as id, i.title as title i.date as date) FROM Issue i"
)

这样的调整可以改善查询时间,内存使用情况和整体性能。希望它有所帮助。

答案 1 :(得分:1)

不知道你做了什么,但我几乎可以肯定你在应用程序中弄乱了什么。我怎么能确定?好吧,我用2G内存运行Ubuntu 11.04,同时使用STS,Chrome和Firefox。即使我将数据库从hsql切换到mySql(这意味着我需要启动mySql),我也没有问题。我正在研究的应用程序不是用于测试Grails。所以,在你花一些钱之前,我建议你写一些测试,做一些代码检查甚至分析。我打赌你找到了一些可疑的东西,你会得到一些好运动。

答案 2 :(得分:1)

请看一下这个问题:Grails app performance degrades over time以便快速查看正在发生的事情,并在此处https://stackoverflow.com/questions/719711/performance-tuning-profiling-of-grails-apps获取更深入的见解。

答案 3 :(得分:0)

安装JProfiler之类的探查器并对应用程序进行概要分析。在Ubuntu上Grails 1.3.7没有任何问题,我有相同的设置,使用大型数据集没有问题。

如果您正在使用JMS,请检查您是否收到任何有害消息(消息消耗失败,导致消息不断重新传递)。

答案 4 :(得分:-2)

Grails是一个基于Java的框架,构建于Spring和Hibernate之上,您必须了解将会有一些内存消耗。 特别是在开发模式下。更不用说为lucene(可搜索的插件)发生的所有内存布线/缓存。演出没什么。买更多的公羊。它很便宜。

我的开发机器有8演出的ram。我永远不会与之合作。

  

请一步一步提供   我的改进指示   这个全新的

  1. 找一家电脑商店。
  2. 购买更多内存。
  3. 在计算机中安装。
  4. :○)