2012-07-04 24 views
5

Tôi đang làm việc trên một ứng dụng web Java EE, bao gồm Struts, Spring và Hibernate. Trong đó, tôi nhận được các trường hợp ngoại lệ sau nhiều lần (ít nhất một lần một ngày).Bắt các vấn đề về không gian heap java trong Tomcat 7

ngoại lệ 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) 

ngoại lệ 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 

Và đây là cấu hình của tôi:

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

Bất cứ ai có xin vui lòng chỉ ra rằng tôi nhận được ngoại trừ này ns vì cấu hình này hay bất kỳ thứ gì khác?

Tôi biết rằng có một số vấn đề trong mã của tôi nhưng làm thế nào tôi có thể dự đoán để tìm ra những vấn đề đó? Tôi đã thử Eclipse MAT để phân tích các bãi bộ nhớ nhưng không nhận được bất kỳ ý tưởng nào.

Tôi đã cố gắng tăng bộ nhớ cho điều này nhưng nó không giúp gì nhiều ngoại trừ việc chỉ giảm tần suất của ngoại lệ này.

Vui lòng trợ giúp. Cảm ơn trước.

+0

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

Trả lời

4

Có hai tùy chọn về lý do bạn nhận được những ngoại lệ này. Trước tiên, ứng dụng của bạn có thể chỉ cần bộ nhớ này nhiều. Thứ hai, ứng dụng của bạn làm rò rỉ bộ nhớ. Trong cả hai trường hợp, MAT là một công cụ tốt để chẩn đoán vấn đề. Một điểm khởi đầu tốt là cây thống trị và báo cáo nghi ngờ rò rỉ.

Các vấn đề liên quan