2012-07-04 14 views
5

Estoy trabajando en una aplicación web Java EE, que consiste en Struts, Spring e Hibernate. En eso, recibo las siguientes excepciones repetidamente (al menos una vez al día).Obteniendo problemas de espacio en Java Heap en Tomcat 7

Excepción 1:

Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space 
    at java.util.LinkedHashMap.createEntry(LinkedHashMap.java:424) 
    at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:406) 
    at java.util.HashMap.put(HashMap.java:385) 
    at sun.util.resources.OpenListResourceBundle.loadLookup(OpenListResourceBundle.java:118) 
    at sun.util.resources.OpenListResourceBundle.loadLookupTablesIfNecessary(OpenListResourceBundle.java:97) 
    at sun.util.resources.OpenListResourceBundle.handleGetObject(OpenListResourceBundle.java:58) 
    at sun.util.resources.TimeZoneNamesBundle.handleGetObject(TimeZoneNamesBundle.java:59) 
    at java.util.ResourceBundle.getObject(ResourceBundle.java:368) 
    at java.util.ResourceBundle.getObject(ResourceBundle.java:371) 
    at java.util.ResourceBundle.getStringArray(ResourceBundle.java:351) 
    at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:100) 
    at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:81) 
    at java.util.TimeZone.getDisplayNames(TimeZone.java:399) 
    at java.util.TimeZone.getDisplayName(TimeZone.java:350) 
    at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1110) 
    at java.text.SimpleDateFormat.format(SimpleDateFormat.java:899) 
    at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869) 
    at java.text.DateFormat.format(DateFormat.java:316) 
    at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:443) 
    at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65) 
    at org.apache.log4j.PatternLayout.format(PatternLayout.java:506) 
    at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310) 
    at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:369) 
    at org.apache.log4j.WriterAppender.append(WriterAppender.java:162) 
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) 
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) 
    at org.apache.log4j.Category.callAppenders(Category.java:206) 
    at org.apache.log4j.Category.forcedLog(Category.java:391) 
    at org.apache.log4j.Category.log(Category.java:856) 
    at com.mchange.v2.log.log4j.Log4jMLog$Log4jMLogger.log(Log4jMLog.java:161) 
    at com.mchange.v2.log.log4j.Log4jMLog$Log4jMLogger.warning(Log4jMLog.java:221) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector.run(ThreadPoolAsynchronousRunner.java:624) 

Excepción 2:

Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1" java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at java.util.HashMap.addEntry(HashMap.java:753) 
    at java.util.HashMap.put(HashMap.java:385) 
    at java.util.HashSet.add(HashSet.java:200) 
    at com.mchange.v2.c3p0.util.ConnectionEventSupport.addConnectionEventListener(ConnectionEventSupport.java:39) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.addConnectionEventListener(NewPooledConnection.java:237) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.refurbishResourceOnCheckin(C3P0PooledConnectionPool.java:292) 
    at com.mchange.v2.resourcepool.BasicResourcePool.attemptRefurbishResourceOnCheckin(BasicResourcePool.java:1606) 
    at com.mchange.v2.resourcepool.BasicResourcePool.access$200(BasicResourcePool.java:32) 
    at com.mchange.v2.resourcepool.BasicResourcePool$1RefurbishCheckinResourceTask.run(BasicResourcePool.java:1228) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547) 
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4" java.lang.OutOfMemoryError: GC overhead limit exceeded 
Exception in thread "Task-[email protected]6c8bb765" java.lang.OutOfMemoryError: GC overhead limit exceeded 
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#3" java.lang.OutOfMemoryError: GC overhead limit exceeded 
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2" java.lang.OutOfMemoryError: GC overhead limit exceeded 
Exception in thread "Task-[email protected]6c8bb765" java.lang.OutOfMemoryError: GC overhead limit exceeded 
Exception in thread "Task-[email protected]6c8bb765" java.lang.OutOfMemoryError: GC overhead limit exceeded 
Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space 
Exception in thread ""http-bio-8080"-exec-2" java.lang.OutOfMemoryError: Java heap space 
Exception in thread ""http-bio-8443"-Acceptor-0" java.lang.OutOfMemoryError: Java heap space 
Exception in thread ""http-bio-8080"-exec-3" java.lang.OutOfMemoryError: Java heap space 
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4" java.lang.OutOfMemoryError: GC overhead limit exceeded 

Y esta es mi configuración:

-server -Xms2048m -Xmx2048m 
-XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:PermSize=512m 
-XX:MaxPermSize=1024m -XX:+DisableExplicitGC" 

Puede alguien por favor señalar que estoy recibiendo esto exceptio ns debido a estas configuraciones o cualquier otra cosa?

Sé que hay algún problema en mi código, pero ¿cómo puedo predecir la salida de estos problemas? He intentado Eclipse MAT para analizar volcados de memoria, pero no tuve ni idea.

Ya he intentado aumentar la memoria para esto, pero no sirvió de mucho excepto reducir la frecuencia de estas excepciones.

Por favor ayuda. Gracias por adelantado.

+0

http://stackoverflow.com/questions/5260643/solr-java-heap-space-out-of-memory –

Respuesta

4

Existen dos opciones sobre por qué está recibiendo estas excepciones. En primer lugar, su aplicación puede necesitar simplemente esta cantidad de memoria. En segundo lugar, su aplicación pierde memoria. En cualquier caso, MAT es una buena herramienta para diagnosticar el problema. Un buen punto de partida es el árbol dominador y el informe sospechoso de fuga.