1

在使用 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() 给了我一个例外。

4

1 回答 1

1

我有类似的问题,它解决了升级到 grails 2.3.1 的问题。尝试一下。

于 2013-10-30T11:05:50.610 回答