【发布时间】:2012-05-01 18:16:39
【问题描述】:
我部署了一个我构建的 Grails 应用程序(我创建的第一个应用程序),该应用程序启动时的内存使用量约为 2 GB。 (雄猫 6)
该应用程序维护 4 种类型之间的大约 133,000 个域对象。对 DB 的大多数事务是通过大约 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.7 KB?咳咳,很多。
-
对象包含大量数据(其中 115,000 个对象每个大约有 17 个属性)。这可能是一个设计问题,但我看不到提取特定领域属性的方法。
标签: mysql memory grails grails-orm