2011-05-25 89 views
0

我是刚刚开始探索Grails的新手,因此我可以在我们的工作中推荐这个 伟大框架。虽然学习我想 创建原型应用程序的使用Grails 1.3.7在Ubuntu上,Grails内存问题

,当我运行的应用程序几分钟后,我的系统挂起,系统监控 表明,消费量超过的演出记忆。我只运行一个 浏览器和终端,甚至没有netbeans或eclipse。

我以为这可能是因为在内存中的hsql分贝,但我配置了 MySQL,甚至然后它的相同的内存问题。我的应用程序是非常简单的几种形式,我使用弹簧安全,jms和可搜索的 插件,仅此而已。

我真的很感激任何建议,这将改善内存 问题,否则我将不得不通过这个框架。作为一名开发人员,我很难过,因为 这样的问题,我会错过这么好的框架。

我的电脑有2个RAM,只能运行一个chrome浏览器和终端。此外,我只有一个控制器,我做了几个域。

请提供一步一步的指令来提高,因为我完全陌生的这个

感谢您阅读

+0

您没有-Xms意外设置为较高值?如果没有其他事情一定要去。虽然Grails的内存要求相当高,但对于非常简单的应用程序,它的范围更多在128mb-256mb之间。 – Ruben 2011-05-25 06:17:50

+0

只是想编造一下,我有同样的问题:当我启动我的Grails应用程序(少于十几个控制器和域类,脚手架),但然后做_absolutely nothing_但保持运行,jvisualvm显示_continuously_攀登堆使用率。注意:我甚至没有击中应用程序(没有请求),只是启动。 – 2011-11-09 02:59:03

回答

-2

的Grails是一个基于Java的框架建立在Spring之上和Hibernate你要明白,有将成为一些内存消耗。 尤其在开发模式。更不用说在lucene(可搜索的插件)中发生的所有内存布线/缓存。演出什么都不是。购买更多内存。它很便宜。

我的开发机器有8演唱会。我从来没有比这更少的工作。

请一步一步提供指导 改善,因为我 全新这个

  1. 找到一个电脑店。
  2. 购买更多内存。
  3. 安装到您的电脑中。

:O)

1

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

+0

代码是不是所有复杂的东西,我想建立一个Twitter克隆学习语言。并且只有一个用户正在击中系统。仍然无法理解内存消耗。如果您能帮助我解决任何可能使用的提示/技巧,除了升级您的RAM之外,我将不胜感激。 – srisris 2011-05-25 07:24:38

0

安装像JProfiler这样的剖析器并对应用程序进行剖析。 Ubuntu上的Grails 1.3.7没有任何问题,我拥有相同的设置,并且在使用大型数据集时没有问题。

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

3

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

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

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

经过几天的监测,结果发现没有内存泄漏,但是有一段时间的内存使用率经历了高峰。目前平均内存使用量约为1200MB。我再次将HEAP增加到3072M,现在尖峰永远不会使用比可用的更多的HEAP,但尖峰可能使用高达2800MB的内存。

我的应用程序现在稳定,并且可以运行数月,没有任何问题。然而,内存使用率仍然很高,我已经在几个月里做了一些工作来改善这一点。有两件事真的有助于减少内存使用量。

第一个很容易,禁用休眠二级缓存。如果您的数据频繁更改,这被称为有用的。对我来说,这也稍微改善了整体表现。这可以在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" 
) 

调整这样可以提高查询时,内存使用情况和整体性能。希望能帮助到你。