开发者社区> 问答> 正文

Tomcat 在 Redeploy 的时候报警告,如何处理,是否重要

07-Feb-2021 14:43:13.525 WARNING [RMI TCP Connection(11)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [servlet3] appears to have started a thread named [Druid-ConnectionPool-Create-654897409] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2752) 07-Feb-2021 14:43:13.526 WARNING [RMI TCP Connection(11)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [servlet3] appears to have started a thread named [Druid-ConnectionPool-Destroy-654897409] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Thread.sleep(Native Method) com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2848)

原提问者GitHub用户JINZhao2000

展开
收起
山海行 2023-07-05 18:10:51 150 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    当您在 Tomcat 中重新部署(redeploy)应用程序时,可能会遇到一些警告信息,这些警告信息通常是由 Tomcat 检测到您重新部署的应用程序正在运行。在大多数情况下,这些警告不会导致应用程序出现问题,但也可能表明您需要注意一些问题。

    以下是一些可能导致 Tomcat 在重新部署应用程序时出现警告的常见原因:

    应用程序的线程没有正确关闭。如果您的应用程序在关闭时没有正确关闭线程,可能会导致 Tomcat 在重新部署时无法释放资源。这可能会导致警告信息出现。

    应用程序的类没有正确卸载。如果您的应用程序在关闭时没有正确卸载类,可能会导致 Tomcat 在重新部署时无法释放资源。这也可能会导致警告信息出现。

    应用程序的资源没有正确释放。如果您的应用程序在关闭时没有正确释放资源,可能会导致 Tomcat 在重新部署时无法释放资源。这可能会导致警告信息出现。

    如果您遇到 Tomcat 在重新部署应用程序时出现警告的情况,可以尝试以下几个方面进行处理:

    检查应用程序的代码。如果警告是由应用程序的代码引起的,您需要检查代码并确保线程、类和资源正确释放。

    确保使用的是最新版本的 Tomcat。如果您使用的是较旧的 Tomcat 版本,可能会存在一些已知问题。您可以尝试升级到最新版本的 Tomcat,以查看是否可以解决该问题。

    重新启动 Tomcat。如果您无法解决警告问题,您可以尝试重新启动 Tomcat,以清除任何未释放的资源。

    2023-07-30 20:35:07
    赞同 展开评论 打赏
  • 这段日志信息表明,你的应用程序可能出现了内存泄漏问题。具体来说,应用程序启动了一个名为Druid-ConnectionPool-Create-654897409的线程,但无法停止它,这可能导致内存泄漏。另外,还有一个名为Druid-ConnectionPool-Destroy-654897409的线程也无法停止,也可能导致内存泄漏。为了解决这个问题,你需要找到导致这些线程无法停止的原因,并采取相应的措施。另外,建议你在代码中增加一些监控和日志记录,以便及时发现和解决类似的问题。

    2023-07-09 10:35:04
    赞同 展开评论 打赏
  • 我好像找到方法了但是我不知道这样子对不对

    @WebListener public class JDBCListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { new Thread(()->DBUtils.getConnection()).start(); }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        try {
            while(DriverManager.getDrivers().hasMoreElements()) {
                DriverManager.deregisterDriver(DriverManager.getDrivers().nextElement());
            }
            AbandonedConnectionCleanupThread.checkedShutdown();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

    }

    在 Tomcat 启动的时候主动去加载带有 DruidDataSource 的类,警告没有了,但是不知道能不能这样做

    原回答者GitHub用户JINZhao2000

    2023-07-06 10:45:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载