我有一个Web应用程序,后端使用Servlet部署在tomcat上。该应用程序是简单的Java应用程序
我在服务器日志中经常看到此错误: 严重:Web应用程序似乎已启动一个名为的线程 [22]但未能阻止它。这很有可能 创建内存泄漏。
是否有可能导致它的潜在原因?
答案 0 :(得分:5)
答案 1 :(得分:2)
我最近遇到过类似的情况已经解决了以下步骤
- 我接受了Thread dump。 (使用Kill -QUIT pid)
- 找到Runnable / Thread类表单转储
- 然后我在run方法中放了一个调试点并启动了应用程序 调试模式。
- 得到启动My Thread的代码,我发现它不是 停止申请时停止了。
- 引入代码以在contextDestroyed方法中停止线程 AppContextListener(这是我的应用程序类,它扩展 ServletContextListener)当我停止时将调用此方法 Tomcat中。
醇>
如果您将Thread设置为Dameon Thread,则无法提供帮助,您可以访问explanation。
答案 2 :(得分:1)
Tomcat等待所有应用程序的线程(用户线程不是守护程序线程)在它关闭之前停止,我想在你的情况下这个特定的线程是用户线程,因此tomcat生成了这个错误。 我建议你把这个线程改成守护进程(假设这个是你的)