【发布时间】:2014-02-06 13:13:44
【问题描述】:
我使用 Eclipse Kepler 开发基于 Sprig/Hibernate/PostgreSQL 的应用程序。该应用程序在由 Eclipse 管理的 Tomcat 中运行。这通常工作正常。
在修改和保存任何 jsp 大约 10 次后,我得到以下异常:
2014 年 1 月 17 日上午 9:53:33 org.apache.catalina.core.StandardContext 重新加载 信息:使用名称 [/app] 重新加载上下文已开始 2014 年 1 月 17 日上午 9:53:33 org.apache.catalina.core.ApplicationContext 日志 信息:销毁 Spring FrameworkServlet 'dispatcherServlet' 2014 年 1 月 17 日上午 9:53:33 org.apache.catalina.core.ApplicationContext 日志 信息:关闭 Spring 根 WebApplicationContext [调试] [ContainerBackgroundProcessor[StandardEngine[Catalina]] 17.01.14 09:53:33] (Utils.java:logSystemState:365) 系统信息:活动会话:1,可用处理器:8,最大内存:1754 MB,总内存:658 MB , freeMemory: 110 MB, loadAverage: 0.11 [DEBUG] [ContainerBackgroundProcessor[StandardEngine[Catalina]] 17.01.14 09:53:33] (LifeCycle.java:destroy:89) APP 1.1.4(建于 Fri, 17.01.2014, 09:55),销毁于 /应用程序,在目标环境“开发”上运行。正常运行时间:1 小时 4 分钟 7 秒 314 毫秒。春季:3.2.6.RELEASE,休眠:4.2.8.Final 2014 年 1 月 17 日上午 9:53:33 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 严重:Web 应用程序 [/app] 注册了 JDBC 驱动程序 [org.postgresql.Driver] 但在 Web 应用程序停止时未能取消注册。为防止内存泄漏,已强制注销 JDBC 驱动程序。 2014 年 1 月 17 日上午 9:53:36 org.apache.catalina.core.ApplicationContext 日志 信息:在类路径上未检测到 Spring WebApplicationInitializer 类型 2014 年 1 月 17 日上午 9:53:36 org.apache.catalina.core.ApplicationContext 日志 信息:初始化 Spring 根 WebApplicationContext ... 2014 年 1 月 17 日上午 9:53:37 org.apache.catalina.session.StandardManager startInternal 严重:来自持久存储的异常加载会话 java.lang.ClassNotFoundException:com.mycompany.app.spring.AuthenticationWrapper 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:270) 在 org.apache.catalina.util.CustomObjectInputStream.resolveClass(CustomObjectInputStream.java:76) 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1610) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 在 java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989) 在 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 在 org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1595) 在 org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1060) 在 org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:284) 在 org.apache.catalina.session.StandardManager.load(StandardManager.java:204) 在 org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954) 在 org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426) 在 org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345) 在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530) 在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540) 在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540) 在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519) 在 java.lang.Thread.run(Thread.java:724) 2014 年 1 月 17 日上午 9:53:37 org.apache.catalina.core.StandardContext startInternal 严重:由于先前的错误,上下文 [/app] 启动失败 2014 年 1 月 17 日上午 9:53:37 org.apache.catalina.core.ApplicationContext 日志 信息:关闭 Spring 根 WebApplicationContext 2014 年 1 月 17 日上午 9:53:37 org.apache.catalina.core.StandardContext 重新加载 信息:重新加载名称为 [/app] 的上下文已完成解决这个问题的唯一方法是停止 Tomcat,执行Project->Clean,然后重新启动 Tomcat。当然会话丢失了,我必须重新登录应用程序。
这个问题严重影响了我的开发工作流程,到目前为止我还没有找到解决办法。
怀疑是文件系统问题,我尝试在 tmpfs 中创建一个文件夹并将其用作 Tomcat 的服务器路径(在 Eclipse 中设置),但它没有改变任何东西。
请注意,这仅发生在我的笔记本电脑(Kubuntu 13.10)上,一位同事使用相同的笔记本电脑和相同的操作系统,但没有发现问题。
似乎问题在于文件系统上的会话已损坏,而 Tomcat 对此感到窒息。为什么会这样?
【问题讨论】: