Web应用程序似乎已启动名为[22]的线程但未能阻止它。这很可能造成内存泄漏

时间:2011-05-05 23:33:30

标签: java multithreading servlets

我有一个Web应用程序,后端使用Servlet部署在tomcat上。该应用程序是简单的Java应用程序

我在服务器日志中经常看到此错误: 严重:Web应用程序似乎已启动一个名为的线程 [22]但未能阻止它。这很有可能 创建内存泄漏。

是否有可能导致它的潜在原因?

3 个答案:

答案 0 :(得分:5)

我使用visualvm 1.3.2并查看正在创建的线程。请务必添加所有插件。

如果你的代码没有完成,你将无法控制它。

您也不知道该消息是否是红鲱鱼。在一段时间内对代码进行负载测试,并衡量会发生什么。

答案 1 :(得分:2)

我最近遇到过类似的情况已经解决了以下步骤

  
      
  1. 我接受了Thread dump。 (使用Kill -QUIT pid)
  2.   
  3. 找到Runnable / Thread类表单转储
  4.   
  5. 然后我在run方法中放了一个调试点并启动了应用程序   调试模式。
  6.   
  7. 得到启动My Thread的代码,我发现它不是   停止申请时停止了。
  8.   
  9. 引入代码以在contextDestroyed方法中停止线程   AppContextListener(这是我的应用程序类,它扩展   ServletContextListener)当我停止时将调用此方法   Tomcat中。
  10.   

如果您将Thread设置为Dameon Thread,则无法提供帮助,您可以访问explanation

答案 2 :(得分:1)

Tomcat等待所有应用程序的线程(用户线程不是守护程序线程)在它关闭之前停止,我想在你的情况下这个特定的线程是用户线程,因此tomcat生成了这个错误。 我建议你把这个线程改成守护进程(假设这个是你的)