Grails - 启动内存/内存使用/域对象

时间:2012-05-01 18:16:40

标签: mysql memory grails gorm

我部署了我构建的Grails应用程序(我创建的第一个应用程序),启动时内存使用量大约为2 GB。 (雄猫6)

该应用程序在4种类型之间维护大约133,000个域对象。数据库的大多数事务都是搜索大约115,000个这些对象和正常的CRUD操作/文件导入和导出。

经过多次使用后,我发现我的内存标记为3.3 GB。

首先关闭 - 为什么启动时内存使用率如此之高? Grails是否默认在内存中缓存域对象使用?

第二 - 我已经在应用程序的许多点处理了GORM清理,但内存使用率仍然很高(3.3GB)。 ORM层中是否存在导致事务缓存等的内容?

由于


---------------的修改 --------------------

测试:我从数据库中删除了所有域对象

启动:514 MB

使用对象:993 MB(我根据DataSource文件修剪了一些性能)


**数据来源**

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "xxx"
password = "xxx"
}
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = true
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
production {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/mydb"
    }
}
}

3 个答案:

答案 0 :(得分:2)

Grails是一种记忆力。

您使用的是hsqldb还是mysql后端数据库?

如果您使用默认的hsqlbd,我的猜测是它导致问题的Hsqldb默认设置。

我的建议是将此添加到您的DataSource.groovy

url = "jdbc:hsqldb:file:" + location + "/prodDb_v02;hsqldb.default_table_type=cached;shutdown=true"

第一部分jdbc:hsqldb:file:.....只设置数据库的位置

重要的部分是hsqldb.default_table_type = cached;

这会将默认类型从内存更改为缓存。

在这里写好...

http://www.jroller.com/alessiopace/entry/hsqldb_memory_and_cached_tables

答案 1 :(得分:2)

您使用二级缓存查询缓存,以便解释您的部分内存使用情况。

除此之外,很难盲目猜测为什么你要使用这么多内存。这可能是很多事情,所以,在你开始翻转开关和逐行测试之前,我建议使用JavaMelodyEhcache monitor之类的东西。这将有助于您了解窗帘背后的情况以及您所做的更改的影响。

Grails比一些类似的框架消耗的更多的内存,但这些性能问题通常是由代码库配置引起的。此外,您可能希望在某些可能有用的JVM选项中查看here

祝你好运。

答案 2 :(得分:2)

JVM选项: -server -Xms512m -Xmx1048M -XX:MaxPermSize = 1048m -XX:+ UseParallelGC -XX:-UseGCOverheadLimit

JavaMelody和perf4j: - 帮助您了解内存使用的位置/内容/方式

http://burtbeckwith.com/blog/?p=73http://grails.1312388.n4.nabble.com/Memory-leak-td1358871.htmlhttp://www.componentix.com/blog/8/run-long-batch-processing-jobs-in-grails-without-memory-leaks 这个