繁体   English   中英

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

[英]A web application appears to have started a thread named [22] but has failed to stop it. This is very likely to create a memory leak

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

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

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

我将使用visualvm 1.3.2并查看正在创建的线程。 一定要添加所有插件。

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

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

我最近遇到过类似的情况在下面的步骤中解决了

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

如果你将Thread设置为Dameon Thread它不会有帮助,你可以访问解释

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM