2012-04-02 25 views
8

我使用SpringSource Tool Suite 3.0.1,Tomcat server 7.0.21,maven-2.2.1。 我成功构建了我的Web应用程序,运行Tomcat服务器。该应用程序成功工作。重新启动Tomcat服务器后,我看到了与网页的login.jsp例外变成下一个错误:java.lang.OutOfMemoryError(PermGen space)和java.lang.ClassNotFoundException在打开jsp页面时出现

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: PermGen space 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: PermGen space 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:839) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
root cause 

java.lang.OutOfMemoryError: PermGen space 
    java.lang.ClassLoader.defineClass1(Native Method) 
    java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
    java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    java.security.AccessController.doPrivileged(Native Method) 
    java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    org.eclipse.jdt.internal.compiler.parser.Parser.createJavadocParser(Parser.java:8256) 
    org.eclipse.jdt.internal.compiler.parser.Parser.<init>(Parser.java:889) 
    org.eclipse.jdt.internal.compiler.Compiler.initializeParser(Compiler.java:685) 
    org.eclipse.jdt.internal.compiler.Compiler.<init>(Compiler.java:283) 
    org.eclipse.jdt.internal.compiler.Compiler.<init>(Compiler.java:204) 
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:442) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.21 logs. 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp 
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:178) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
root cause 

java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp 
    java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    java.security.AccessController.doPrivileged(Native Method) 
    java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132) 
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63) 
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.21 logs. 

的login.jsp - 主页被SpringSecurity配置。

我不明白问题的根源,因为我没有重建项目。 之后我尝试错误恢复的几种方法:

  • 刷新项目
  • 清理并重建项目
  • 更新行家依赖
  • 清洁Tomcat的工作目录
  • 干净。从服务器菜单按钮

没有任何方法没有帮助我。 但是应用程序的内部逻辑正常工作(它不与Web界面关联)。我得到适当的日志消息。但是,一旦我打开页面login.jsp,我收到错误消息。 然后我试图恢复到以前的稳定版本的项目。不幸的是我得到了同样的错误。

登录控制台显示输出之前,以下消息页面logon.jsp的错误信息:

02.04.2012 11:22:41 org.apache.jasper.compiler.TldLocationsCache tldScanJar 
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 
02.04.2012 11:22:44 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/main] threw exception [Handler processing failed; nested exception is java.lang.OutOfMemoryError: PermGen space] with root cause 
java.lang.OutOfMemoryError: PermGen space 

我发现类似的问题:http://www.mail-archive.com/[email protected]/msg54797.htmlhttp://wiki.metawerx.net/wiki/Org.apache.jasper.JasperException。但它没有帮助我。

如何解决这个问题?

+0

@ Didgeridoo:你可以将问题分为两个:) – Jayan 2012-04-02 11:55:54

+0

login.jsp是否位于WEB_INF/views /? – 2012-04-02 12:09:22

+0

Tomcat配置使用多少内存?你的应用需要多少内存? – BalusC 2012-04-02 14:08:22

回答

19

对于内存不足错误请确保您有以下参数设置(与一位可敬的值)

-Xmx1024m -XX:MaxPermSize=512m 

编辑:

512米1024米只是建议! 您可能需要将这些设置调整为硬件资源。

通常情况下,您应该从128米左右的某个地方开始,每次出现OutOfMemory错误时尝试将分配的数量加倍。

例如,:

  • 你有256米为MaxPermSize参数,你会得到内存不足 - 新的阈值应定512米

  • 你有512米为MaxPermSize参数,你会得到内存不足 - 新的阈值应为1G

    设置可以在Java官方文档在Oracle找到

更多有关调整JVM参数的详细信息。

+0

谢谢!有用! – Didgeridoo 2012-04-02 14:13:44

+0

很高兴它帮助。另请标记答案为正确的。 – 2012-04-02 14:16:08

+0

谢谢!有用! 我将这些参数添加到“Apache Tomcat v7.0.21”中的“VM参数”启动配置中。 我认为这个问题已经超出了我的笔记本电脑的内存。我关闭了几个应用程序,重新启动了SpringSource工具套件,它工作正常! – Didgeridoo 2012-04-02 14:26:42

0

这取决于哪个文件正在运行,无论是catalina.bat中或catalina.sh。设置Java选项,如下,并尝试:

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Xms512m -Xmx512m -XX:PermSize=512m -XX:MaxPermSize=1024m 
14

只是一个扩大的Bogdan's answer
1版本在主菜单窗口 - >显示视图 - >服务器
2.在'服务器' 查看关于 'Tomcat的' 双击
3. Tomcat的概述页面将被打开
4.找到“基本信息”部分和“打开启动配置
5.请单击“编辑配置”弹出去参数标签
6.找到'VM参数 '部分和位置-Xmx1024m -XX:MaxPermSize = 512m there
7.单击'确定'并启动您的Tomcat。

+0

我可以添加超过512M吗?如果是,我可以给的最大值是多少? – user3705478 2014-10-15 07:35:08

+0

是的,你可以。最大值受限于您盒子上本机内存的数量,具体取决于32/64位JVM和OS内存的可用性。 PS:另请注意,自Java 8以来,PermGen已被MetaSpace区域所取代。 所以参数将是-XX:MaxMetaspaceSize = 512m – 2014-10-15 08:42:33