首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用tomcat泄漏war servlet中的内存

用tomcat泄漏war servlet中的内存
EN

Stack Overflow用户
提问于 2014-03-21 09:12:31
回答 1查看 880关注 0票数 0

当我试图在我的工作servlet中实现一个新函数时,我遇到了一些问题。

现在我有了一个servlet,手机可以在其中注册。移动电话使用rest来注册这个servlet。而且效果很好。只要你想注册一部手机,它就能工作。

但是现在,我需要添加一个新的功能。我想在基础结构的其他组件上注册这个服务器。

我要在乞丐那里登记。我的意思是,当servlet启动时,进行注册并忘记它,就像以前一样工作。

这是tomcat给我的错误:

代码语言:javascript
复制
Grave: The web application [/servletRegister] appears to have started a thread named [Timer-8] but has failed to stop it. This is very likely to create a memory leak.

这是我的开课:

代码语言:javascript
复制
@Override
public Set<Class<?>> getClasses() {
    //-------------------------------
    //Set registration here
    //GatewayRegistrationHandler reg = GatewayRegistrationHandler.getInstance(); 
    //reg.registerDevice();
    //-------------------------------
    //register on a new thread due to process time      
    new Thread (new RegisterGatewayOnBackground()).start();

    //Next are the working servlet code
    Set<Class<?>> classes = new HashSet<Class<?>>();
    classes.add(PublicationsResource.class);  /
    classes.add(DeviceResource.class);
    return classes;
}

}

我先试了一下评论线。然后,我发现了一个内存泄漏,我试图在一个新线程中执行它们,以避免泄漏。但行为是一样的。

背景功能是:

代码语言:javascript
复制
public class RegisterGatewayOnBackground implements Runnable {
    public RegisterGatewayOnBackground() {
    }   
    public void run() {
        registerDevice();
    }
    private void registerDevice() {         
          GatewayRegistrationHandler reg = GatewayRegistrationHandler.getInstance(); 
          reg.registerDevice();   
    }
}

GatewayRegistrationHandler运行良好,因为当我运行servlet时,它会执行、进行注册,然后崩溃。我认为这是一个时间问题,背景可以解决它,但我被困在这里,因为背景也是这样。

我不知道怎样才能找到我的记忆泄漏。我正在寻求建议或任何可能帮助我解决问题的工具。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-21 09:38:27

当您像这样启动线程时,它将不会被命名为"Timer-x“。因此,这可能是从其他地方开始的一条线索。

tomcat给您的消息表明webapp应用程序正以某种方式被取消部署(然后它检查仍然存在的线程,并抱怨是否存在)。我不知道为什么会发生未部署,但如果是因为您停止了why应用程序,您可能不需要修复这个问题,除非您做了(大量)热部署(部署和取消部署,同时保持tomcat运行)。这是因为,如果它在您要终止进程之前泄漏内存,那么内存泄漏不会有任何危害,修复它将是浪费时间。

如果您想要修复它,一个简单的方法是钩住一个分析器,看看是谁启动了这个“计时器”线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22554489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档