it-swarm.com.ru

java.lang.OutOfMemoryError (пространство PermGen) и Java.lang.ClassNotFoundException при открытии страницы jsp

Я использую SpringSource Tool Suite 3.0.1, сервер Tomcat 7.0.21, maven-2.2.1. Я успешно создал свое веб-приложение, запустил сервер Tomcat. Приложение успешно работает. После перезапуска сервера Tomcat я по очереди увидел следующие ошибки с исключениями на веб-странице login.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.

Я не понимаю источник проблемы, потому что я не перестроил проект. После этого я пробую несколько способов устранения ошибок:

  • Обновление проект
  • Очистить и восстановить проект
  • Обновить maven-зависимость
  • Чистый рабочий каталог Tomcat
  • Кнопка Очистить ... из меню сервера

Ничего из способов мне не помогло . Но внутренняя логика приложения работает нормально (она не связана с веб-интерфейсом). Я получаю соответствующие сообщения журнала. Но как только я открываю страницу 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.html и http://wiki.metawerx.net/wiki/Org.Apache .jasper.JasperException . Но это не помогло мне.

Как решить эту проблему?

9
Didgeridoo

Для ошибки OutOfMemory убедитесь, что у вас установлены следующие параметры (и с приемлемым значением)

-Xmx1024m -XX:MaxPermSize=512m

Правка:

512m и 1024m - это просто предложения! Вам может потребоваться настроить эти параметры на свои аппаратные ресурсы.

Обычно вы должны начинать примерно с 128 м, и каждый раз, когда вы получаете ошибку OutOfMemory, попробуйте удвоить выделенную сумму.

Например:

  • у вас есть 256 м для MaxPermSize, и вы получаете OutOfMemory - новый порог должен быть установлен на 512 м

  • у вас есть 512 м для MaxPermSize, и вы получаете OutOfMemory - новый порог должен быть установлен на 1G

Более подробную информацию о настройке параметров JVM можно найти в официальной документации Java по адресу Oracle .

19
Bogdan Emil Mariesan

Просто расширенная версия ответ Богдана
1. В Главное меню перейдите к Окно -> Показать представление -> Серверы
2. В 'Servers' View дважды щелкните по 'Tomcat'
3. Будет открыта страница Обзор Tomcat
4. Найдите раздел "Общая информация" и нажмите "Открыть конфигурацию запуска"
5. Во всплывающем окне 'Изменить конфигурацию "перейдите на вкладку Аргументы
6. Найдите раздел 'VM arguments "и поместите туда -Xmx1024m -XX: MaxPermSize = 512m
7. Нажмите «ОК» и запустите Tomcat.

14
Anton Shchastnyi

Похоже, что Tomcat не справляется с компиляцией JSP, возможно, вы захотите подумать о предварительной компиляции JSP (что даст дополнительное преимущество - проверка JSP на наличие синтаксических ошибок перед развертыванием приложения).

Смотрите также: Как я могу сделать JSP Tomcat при предварительной компиляции при запуске?

1
beny23

Это зависит от того, какой файл вы используете: catalina.bat или catalina.sh. Установите параметры Java, как показано ниже, и попробуйте:

set Java_OPTS=%Java_OPTS% %LOGGING_CONFIG% -Xms512m -Xmx512m -XX:PermSize=512m -XX:MaxPermSize=1024m
0
Jyotshna Pardhia