Web应用程序[ROOT]似乎启动了一个名为[Thread-12]的线程,但未能停止它。这很可能会造成内存泄漏

现象

项目停止的时候,控制台打印这个错误,提示有些线程没有停止,可能会导致内存泄漏。

项目部署在tomcat中,当项目停止的时候由于自己启动的线程池、JDBC链接等线程没有关闭,导致tomcat抛出这个警告。

解决办法

增加一个监听器,在项目结束事件中关闭自己启动的链接和线程池等。

@WebListener
public class DomesticStatisticServiceExecutorShutdown implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("系统停止");
        recLoop = false;
        executorService.shutdown();
        try {
            if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
                executorService.shutdownNow();
            }
        } catch (InterruptedException e) {
            executorService.shutdownNow();
        }
    }
}

给出的实例中是线程池的关闭方法。首先调用shutdown(),试图关闭线程。等待一段时间后,还是没有关闭则强制关闭线程池。

项目中使用了其他的链接信息、接口调用等代码。可以自行查阅相关功能的close方法,写到这个方法中即可。

09-Jun-2023 15:19:12.806 信息 [main] org.apache.catalina.core.StandardServer.await 通过关闭端口接收到有效的关闭命令。正在停止服务器实例。 09-Jun-2023 15:19:12.807 信息 [main] org.apache.coyote.AbstractProtocol.pause 暂停ProtocolHandler["http-nio-8080"] 09-Jun-2023 15:19:13.217 信息 [main] org.apache.catalina.core.StandardService.stopInternal 正在停止服务[Catalina] 09-Jun-2023 15:19:13.230 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。 09-Jun-2023 15:19:13.230 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册了JDBC驱动程序 [org.apache.ibatis.datasource.unpooled.UnpooledDataSource.DriverProxy],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。 09-Jun-2023 15:19:13.230 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎启动一个名为[mysql-cj-abandoned-connection-cleanup]的线程,但未能停止它。这很可能会造成内存泄漏线程的堆栈跟踪:[ java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:91) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:750)] 09-Jun-2023 15:19:13.241 信息 [main] org.apache.coyote.AbstractProtocol.stop 正在停止ProtocolHandler ["http-nio-8080"] 09-Jun-2023 15:19:13.252 信息 [main] org.apache.coyote.AbstractProtocol.destroy 正在摧毁协议处理器 ["http-nio-8080"] 是什么原因
06-10
17-Oct-2025 09:56:27.971 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.webresources.Cache.getResource 无法将位于[/WEB-INF/classes/WebRoot/WEB-INF/views/modules/test/testList.jsp]的资源添加到Web应用程序[/nxspweb]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。 17-Oct-2025 09:56:27.971 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.webresources.Cache.getResource 无法将位于[/WEB-INF/classes/WebRoot/WEB-INF/views/modules/yydj/yydj.jsp]的资源添加到Web应用程序[/nxspweb]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。 17-Oct-2025 09:56:34.598 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。 17-Oct-2025 09:56:34.613 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath 17-Oct-2025 09:56:35.350 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext 17-Oct-2025 09:56:45.526 严重 [www.nxspyjy.gov.cn-startStop-1] org.apache.tomcat.util.descriptor.web.SecurityConstraint.findUncoveredHttpMethods 对于URL模式为[/*]的安全约束,只包括HTTP方法[TRACE HEAD DELETE OPTIONS PUT]。所有其他方法都没有涉及。 17-Oct-2025 09:56:46.691 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring DispatcherServlet 'springServlet' 17-Oct-2025 09:56:53.755 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\Administrator\apache-tomcat-8.5.59\webapps\nxspweb]的部署已在[39,404]毫秒内完成 17-Oct-2025 09:56:53.771 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 92013 ms 17-Oct-2025 09:56:53.771 严重 [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost:8005]: java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:102) at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513) at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:180) at java.net.ServerSocket.bind(ServerSocket.java:375) at java.net.ServerSocket.<init>(ServerSocket.java:237) at org.apache.catalina.core.StandardServer.await(StandardServer.java:421) at org.apache.catalina.startup.Catalina.await(Catalina.java:776) at org.apache.catalina.startup.Catalina.start(Catalina.java:722) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) 17-Oct-2025 09:56:53.771 信息 [main] org.apache.coyote.AbstractProtocol.pause 暂停ProtocolHandler["http-nio-80"] 17-Oct-2025 09:56:53.771 信息 [main] org.apache.catalina.core.StandardService.stopInternal 正在停止服务[Catalina] 17-Oct-2025 09:56:53.785 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log Destroying Spring FrameworkServlet 'springServlet' 17-Oct-2025 09:56:53.803 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext 17-Oct-2025 09:56:53.931 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。 17-Oct-2025 09:56:53.952 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册了JDBC驱动程序 [com.mysql.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。 17-Oct-2025 09:56:53.953 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎启动一个名为[Abandoned connection cleanup thread]的线程,但未能停止它。这很可能会造成内存泄漏线程的堆栈跟踪:[ java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:150) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:41)] 17-Oct-2025 09:56:53.953 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎启动一个名为[Thread-5]的线程,但未能停止它。这很可能会造成内存泄漏线程的堆栈跟踪:[ java.lang.Thread.sleep(Native Method) org.apache.ibatis.thread.Runnable$1.run(Runnable.java:101) java.lang.Thread.run(Thread.java:750)] 17-Oct-2025 09:56:53.980 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log Destroying Spring FrameworkServlet 'springServlet' 17-Oct-2025 09:56:54.012 信息 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext 17-Oct-2025 09:56:54.141 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [nxspweb] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。 17-Oct-2025 09:56:54.173 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [nxspweb] 注册了JDBC驱动程序 [com.mysql.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。 17-Oct-2025 09:56:54.192 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[nxspweb]似乎启动一个名为[Abandoned connection cleanup thread]的线程,但未能停止它。这很可能会造成内存泄漏线程的堆栈跟踪:[ java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:150) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:41)] 17-Oct-2025 09:56:54.205 警告 [www.nxspyjy.gov.cn-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[nxspweb]似乎启动一个名为[Thread-8]的线程,但未能停止它。这很可能会造成内存泄漏线程的堆栈跟踪:[ java.lang.Thread.sleep(Native Method) org.apache.ibatis.thread.Runnable$1.run(Runnable.java:101) java.lang.Thread.run(Thread.java:750)] 17-Oct-2025 09:56:54.205 信息 [main] org.apache.coyote.AbstractProtocol.stop 正在停止ProtocolHandler ["http-nio-80"] 17-Oct-2025 09:56:54.205 信息 [main] org.apache.coyote.AbstractProtocol.destroy 正在摧毁协议处理器 ["http-nio-80"]
最新发布
10-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值