Grails内存泄漏

时间:2013-07-30 08:55:18

标签: mongodb grails memory-leaks grails-2.2

我们正在使用mongodb开发Grails(2.2.1)应用程序,并且在压力测试期间,我们发现有一个域类,即使在垃圾收集完成之前也会使大量实例保持活动状态。

我们使用jmeter对服务器和jvisualvm进行了超过5000次查询以跟踪内存。

在jvisualvm中,我们可以了解其他域类如何在实例中增长,但是当GC完成时,就会清除这些内容,但是这个域类总是保留实例。

我们使用了app-info插件,并注意到会话中没有保留任何信息。

有域类的代码:

class User {
    ObjectId id
    String nickName
    String email
    String image 
    String password
    String passwordBis
    String token

    static transients = ["passwordBis"]

    static constraints = {
        image nullable:true, blank:true
        nickName nullable:false,blank:false,maxSize:100
        email nullable:false,blank:false,email:true/*,unique:"company"*/
        password nullable:true, blank:true
    }
}

控制器的操作withch导致内存泄漏:

def doLogin(String privateKey, String id){
    try {
        siteService.findPrivateSite(privateKey)
        User user = User.get(id)
        if (!user){
            render text:"User does not exist for the given id",status:404
        } else {
            String token = UUID.randomUUID().toString()
            user.token = token
            user.save()
            render token
        }
    } catch (InvalidRequestException e){
        render text:e.getMessage(),status:404
    }
}

内存泄漏在user.save()中 我们做错了吗?这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

我认为你已经在我的问题中根据你的回答找到了解决方案...... Memory Leak in Grails with MongoDB

谢谢:)