Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting java heap space issues in Tomcat 7

I am working on a Java EE web application, which consists of Struts, Spring and Hibernate. In that, I get the following exceptions repeatedly (at least once a day).

Exception 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)

Exception 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-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner@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-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner@6c8bb765" java.lang.OutOfMemoryError: GC overhead limit exceeded
Exception in thread "Task-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner@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

And this is my configuration :

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

Can anyone please point out that am I getting this exceptions because of this configurations or anything else ?

I know that there is some issue in my code but how can I predict out to find those issues ? I have tried Eclipse MAT to analyse memory dumps but didn't get any idea though.

I have already tried to increase memory for this but it didn't help much except just reducing the frequency of this exceptions.

Please help. Thanks in advance.

like image 792
Ved Avatar asked Oct 07 '22 08:10

Ved


1 Answers

There are two options on why you're getting these exceptions. First your application may simply need this much memory. Second your application leaks memory. In either case MAT is a good tool to diagnose the issue. A good starting point are the dominator tree and the leak suspect report.

like image 200
Philippe Marschall Avatar answered Oct 13 '22 12:10

Philippe Marschall