在使用MongoDB保存或更新Grails中的多个对象时,我发现了一个奇怪的问题。目前我使用的是Grails 2.2.3和MongoDB插件1.3.0。
问题似乎是当我手动调用GC时,MiUsuario的实例都不是GC。在我们的主应用程序中,我们不进行批量更新,但在进行负载测试时(使用JMeter并使用Java VisualVM监视JVM),此问题会导致内存填充并且Tomcat停止响应。
我已经创建了一个小的新应用程序来显示问题。
一个简单的域对象:
class MiUsuario {
ObjectId id
String nickName
}
我的控制器:
import pruebasrendimiento.Prueba
class MiUsuarioController {
def doLogin(String privateKey, String id){
MiUsuario user = MiUsuario.get(id)
user.nickName = new Random().nextInt().toString()
user.save(failOnError:true)
render 'ok'
}
}
我的BuildConfig(只是依赖项和插件部分):
dependencies {
}
plugins {
// runtime ":hibernate:$grailsVersion"
runtime ":jquery:1.8.3"
runtime ":resources:1.2"
build ":tomcat:$grailsVersion"
// runtime ":database-migration:1.3.2"
// compile ':cache:1.0.1'
runtime ":mongodb:1.3.0"
}
我也尝试了很久以前Burt所说的内容(http://burtbeckwith.com/blog/?p=73),但是DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP.get()。clear()没有任何区别。在该页面中说的另一个选项RequestContextHolder.resetRequestAttributes()给了我一个例外。
答案 0 :(得分:1)
我有类似的问题,它解决了升级到grails 2.3.1。试试吧。