2012-04-02 20 views
8

Uso SpringSource Tool Suite 3.0.1, server Tomcat 7.0.21, maven-2.2.1. Ho creato con successo la mia applicazione web, ho eseguito il server Tomcat. L'applicazione ha funzionato con successo. Dopo il riavvio del server Tomcat ho visto di volta in volta i prossimi errori con eccezioni pagina web login.jsp:java.lang.OutOfMemoryError (PermGen space) e java.lang.ClassNotFoundException all'apertura della pagina 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. 

e

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 - home page è configurato da SpringSecurity.

Non capisco la fonte del problema, perché non ho ricostruito il progetto. Dopo di che ho provare diversi modi per il recupero di errore:

  • progetto Refresh
  • e ricostruire progetto
  • aggiornamento Maven dipendenza
  • directory di lavoro
  • Clean Tomcat
  • Clean ... pulsante dal menu Server

Niente dei modi non mi ha aiutato. Ma la logica interna dell'applicazione funziona correttamente (non è associata all'interfaccia Web). Ottengo i messaggi di registro appropriati. Ma non appena apro la pagina login.jsp, ottengo i messaggi di errore. Quindi ho provato a ripristinare la precedente versione stabile del progetto. Purtroppo ho avuto gli stessi errori.

Entra nella console visualizza i seguenti messaggi prima di emettere i messaggi di errore nella pagina 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 

ho trovato domande simili: http://www.mail-archive.com/[email protected]/msg54797.html e http://wiki.metawerx.net/wiki/Org.apache.jasper.JasperException. Ma non mi ha aiutato.

Come risolvere questo problema?

+0

@ Didgeridoo: è possibile dividere la domanda int due :) – Jayan

+0

login.jsp si trova in WEB_INF/views /? –

+0

Quanta memoria è configurata da Tomcat? Quanti ricordi richiede l'applicazione? – BalusC

risposta

19

Per l'errore OutOfMemory assicurarsi di aver impostato i seguenti parametri (e con un valore di tutto rispetto)

-Xmx1024m -XX:MaxPermSize=512m 

EDIT:

512m e 1024m sono solo suggerimenti! Potrebbe essere necessario eseguire il tweek di queste impostazioni sulle risorse hardware.

Di solito dovresti iniziare da qualche parte intorno a 128 me ogni volta che ottieni un errore OutOfMemory prova a raddoppiare l'importo allocato.

Ad es.:

  • avete 256m per MaxPermSize e si ottiene OutOfMemory - la nuova soglia dovrebbe essere fissata a 512 m

  • avete 512M per MaxPermSize e si ottiene OutOfMemory - la nuova soglia dovrebbe essere fissata a 1G

Ulteriori dettagli sull'ottimizzazione dei parametri JVM sono disponibili nella documentazione ufficiale Java al numero Oracle.

+0

Grazie !!! Funziona! – Didgeridoo

+0

Felice di averlo aiutato. Inoltre, si prega di contrassegnare la risposta come corretta. –

+0

Grazie !!! Funziona! Ho aggiunto questi parametri a "Argomenti VM" in "Apache Tomcat v7.0.21" la configurazione di avvio. Penso che il problema fosse la memoria del mio portatile. Ho chiuso diverse applicazioni, riavviato SpringSource Tool Suite e ha funzionato! – Didgeridoo

1

Sembra che Tomcat stia ricadendo sulla compilazione dei JSP, si potrebbe prendere in considerazione la precompilazione dei JSP (che avrebbe il vantaggio di controllare i JSP per gli errori di sintassi prima di distribuire l'app).

Consulta anche: How can I make Tomcat pre-compile JSPs on startup?

0

Questo dipende da quale file è in esecuzione, sia catalina.bat o catalina.sh. Impostare le opzioni Java come qui sotto e provare:

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

Basta una versione ampliata di Bogdan's answer
1. Nel menu principalevai a Finestra -> Visualizza Visualizza -> Server
2. Alla 'Server' View doppio click su 'Tomcat'
3. Tomcat Panoramica verrà aperta
sezione e 10 4. trovare 'generali' cliccare su 'Apri configurazione di lancio'
5. Alla comparsa del 'Modifica configurazione' andare a Argomenti scheda
6. Trova 'argomenti VM 'sezione e inserire -Xmx1024m -XX: MaxPermSize = 512m
7. Fare clic su "OK" e avviare Tomcat.

+0

Posso aggiungere più di 512 M? Se sì, qual è il valore massimo che posso dare? – user3705478

+0

Sì, è possibile. Il valore massimo è limitato dalla quantità di memoria nativa sulla scatola, a seconda della disponibilità della memoria JVM e OS a 32/64 bit. PS: Si noti inoltre che da Java 8, PermGen è stato sostituito dall'area MetaSpace. Quindi l'argomento sarebbe -XX: MaxMetaspaceSize = 512m –

Problemi correlati