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
当您在 Tomcat 中重新部署(redeploy)应用程序时,可能会遇到一些警告信息,这些警告信息通常是由 Tomcat 检测到您重新部署的应用程序正在运行。在大多数情况下,这些警告不会导致应用程序出现问题,但也可能表明您需要注意一些问题。
以下是一些可能导致 Tomcat 在重新部署应用程序时出现警告的常见原因:
应用程序的线程没有正确关闭。如果您的应用程序在关闭时没有正确关闭线程,可能会导致 Tomcat 在重新部署时无法释放资源。这可能会导致警告信息出现。
应用程序的类没有正确卸载。如果您的应用程序在关闭时没有正确卸载类,可能会导致 Tomcat 在重新部署时无法释放资源。这也可能会导致警告信息出现。
应用程序的资源没有正确释放。如果您的应用程序在关闭时没有正确释放资源,可能会导致 Tomcat 在重新部署时无法释放资源。这可能会导致警告信息出现。
如果您遇到 Tomcat 在重新部署应用程序时出现警告的情况,可以尝试以下几个方面进行处理:
检查应用程序的代码。如果警告是由应用程序的代码引起的,您需要检查代码并确保线程、类和资源正确释放。
确保使用的是最新版本的 Tomcat。如果您使用的是较旧的 Tomcat 版本,可能会存在一些已知问题。您可以尝试升级到最新版本的 Tomcat,以查看是否可以解决该问题。
重新启动 Tomcat。如果您无法解决警告问题,您可以尝试重新启动 Tomcat,以清除任何未释放的资源。
这段日志信息表明,你的应用程序可能出现了内存泄漏问题。具体来说,应用程序启动了一个名为Druid-ConnectionPool-Create-654897409的线程,但无法停止它,这可能导致内存泄漏。另外,还有一个名为Druid-ConnectionPool-Destroy-654897409的线程也无法停止,也可能导致内存泄漏。为了解决这个问题,你需要找到导致这些线程无法停止的原因,并采取相应的措施。另外,建议你在代码中增加一些监控和日志记录,以便及时发现和解决类似的问题。
我好像找到方法了但是我不知道这样子对不对
@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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。