使用MongoDB在Grails中泄漏内存

时间:2013-10-30 09:05:25

标签: mongodb grails memory-leaks garbage-collection

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

1 个答案:

答案 0 :(得分:1)

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