2012-07-04 52 views
5

私は、Struts、Spring、およびHibernateで構成されるJava EE Webアプリケーションを開発中です。それで、私は以下の例外を繰り返し(少なくとも1日に1回)受ける。Tomcat 7でのJavaヒープスペースの問題

例外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) 

例外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 

そして、これは私の設定です:

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

誰もが私が取得していますことを指摘してくださいすることができこの例外この構成や何か他の理由がありますか?

私のコードにいくつかの問題があることは知っていますが、その問題を見つけるためにどうすれば予測できますか? 私はメモリマットを解析するためにEclipse MATを試しましたが、何も考えられませんでした。

私はすでにこのためにメモリを増やそうとしましたが、この例外の頻度を減らす以外はあまり役に立ちませんでした。

助けてください。前もって感謝します。

+0

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

答えて

4

これらの例外が発生する理由は2つあります。最初に、アプリケーションでこのような多くのメモリが必要になることがあります。 2番目のアプリケーションはメモリをリークします。どちらの場合も、MATは問題を診断するための優れたツールです。良いスタートポイントは、ドミネーターツリーとリーク疑惑レポートです。

関連する問題