我是刚开始探索Grails的新手,所以我可以推荐这个 我们工作中的项目的伟大框架。在学习的同时我正努力 在ubuntu上使用Grails 1.3.7创建应用程序的原型,
当我在几分钟后运行应用程序时,我的系统挂起并且系统监视器 表明它消耗的内存超过了一大堆。我只是在经营一家 浏览器和终端,甚至没有netbeans或eclipse。
我认为这可能是因为内存中的hsql db,但是我配置了 mysql甚至然后它的内存问题相同。我的申请非常 简单的几种形式,我使用弹簧安全,jms和搜索 插件,仅此而已。
我真的很感激任何会改善记忆的建议 问题,否则我将不得不放弃这个框架。作为开发人员我 感到难过,因为我会错过这样精彩的框架 关于这个问题。
我的电脑有2个内存,只运行Chrome浏览器和终端。此外,我只有一个控制器,我只有几个域。
请提供一步一步的说明,以便改进,因为我对此完全陌生
感谢您阅读
答案 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。我永远不会与之合作。
请一步一步提供 我的改进指示 这个全新的
:○)