tomcat异常:Web应用程序[]似乎已经启动了一个...or非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。

川长思鸟来 2023-01-13 08:47 545阅读 0赞

1、问题1:Web应用程序[]似乎已经启动了一个…


1.1、报错异常信息显示:

  1. 6-Apr-2021 19:37:28.042 警告 [RMI TCP Connection(6)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[smbms]似乎启动了一个名为[Abandoned connection cleanup thread]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
  2. java.lang.Object.wait(Native Method)
  3. java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
  4. com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:64)
  5. java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  6. java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  7. java.lang.Thread.run(Thread.java:748)]
  8. 16-Apr-2021 19:37:28.115 警告 [RMI TCP Connection(6)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion 未知版本字符串 [4.0]。将使用默认版本。

1.2、解决方法

  1. 添加监听器,当项目进程结束时销毁该进程,ok,完美解决
  2. package com.fufu.listen;
  3. import java.sql.Driver;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. import java.util.Enumeration;
  7. import javax.servlet.ServletContextEvent;
  8. import javax.servlet.ServletContextListener;
  9. import javax.servlet.annotation.WebListener;
  10. import com.mysql.jdbc.AbandonedConnectionCleanupThread;
  11. @WebListener
  12. public class ContextFinalizer implements ServletContextListener {
  13. @Override
  14. public void contextInitialized(ServletContextEvent sce) {
  15. Enumeration<Driver> drivers = DriverManager.getDrivers();
  16. Driver d = null;
  17. while (drivers.hasMoreElements()) {
  18. try {
  19. d = drivers.nextElement();
  20. DriverManager.deregisterDriver(d);
  21. }
  22. catch (SQLException ex) {
  23. ex.printStackTrace();
  24. }
  25. }
  26. AbandonedConnectionCleanupThread.shutdown();
  27. }
  28. @Override
  29. public void contextDestroyed(ServletContextEvent sce) {
  30. }
  31. }

2、问题2:非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。


2.1、报错异常信息显示:

  1. 16-Apr-2021 19:45:13.402 信息 [Abandoned connection cleanup thread] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading 非法访问:此Web应用程序实例已停止。无法加载[java.lang.ClassLoader]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
  2. java.lang.IllegalStateException: 非法访问:此Web应用程序实例已停止。无法加载[java.lang.ClassLoader]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
  3. at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1378)
  4. at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1366)
  5. at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1218)
  6. at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
  7. at com.mysql.jdbc.AbandonedConnectionCleanupThread.checkContextClassLoaders(AbandonedConnectionCleanupThread.java:90)
  8. at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:63)
  9. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  10. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  11. at java.lang.Thread.run(Thread.java:748)

2.2、解决方法

  1. 进入tomcat的配置文件,conf->server.xml,找到Host标签,修改其子标签Contextreloadable为**false**。ok,完美解决
  2. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  3. <-- 设置为false-->
  4. <Context reloadable="false" />
  5. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
  6. </Host>

发表评论

表情:
评论列表 (有 0 条评论,545人围观)

还没有评论,来说两句吧...

相关阅读