天天看點

tomcat 記憶體溢出問題

from: http://www.iteye.com/problems/10072

最近客戶反映經常抛出記憶體溢出的異常,在下面貼出一部分異常資訊,希望大家能幫我分析一下,找出原因,萬分感激!

[CLOSE] ID:107 28000 [ACTION : get_mod ]

Exception in thread "Thread-2" 2008-12-28 5:58:29 org.apache.catalina.connector.

CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 6:05:33 org.apache.tomcat.util.net.JIoEndpoint$Acceptor run

嚴重: Socket accept failed

java.lang.OutOfMemoryError: Java heap space

2008-12-28 6:05:33 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet default threw exception

java.lang.OutOfMemoryError: Java heap space

2008-12-28 6:05:33 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

[OPEN ] ID:767 [ACTION : auth ] Sun Dec 28 06:25:33 CST 2008 

[CLOSE] ID:767 37547 [ACTION : auth ]

2008-12-28 6:37:18 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet JSLabelModule threw exception

java.lang.OutOfMemoryError: Java heap space

Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:24:30 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:25:16 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet default threw exception

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:45:59 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet default threw exception

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:24:58 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:24:48 unknown unknown

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:24:30 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet default threw exception

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:45:59 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:45:59 org.apache.tomcat.util.net.JIoEndpoint$Acceptor run

嚴重: Socket accept failed

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:45:59 unknown unknown

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 7:42:50 unknown unknown

嚴重: Exception initializing page context

java.lang.OutOfMemoryError: Java heap space

Exception in thread "catalina-exec-7282" java.lang.OutOfMemoryError: Java heap space 

Exception in thread "catalina-exec-7268" java.lang.OutOfMemoryError: Java heap space 

Exception in thread "catalina-exec-7256" java.lang.OutOfMemoryError: Java heap space 

2008-12-28 8:40:54 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 8:18:35 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 8:18:23 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet default threw exception

java.lang.OutOfMemoryError: Java heap space

2008-12-28 8:18:23 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:45:57 org.apache.coyote.http11.Http11Processor process

嚴重: Error finishing response

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:41:37 org.apache.coyote.http11.Http11Processor process

嚴重: Error finishing response

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:31:58 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

Exception in thread "catalina-exec-7292" java.lang.OutOfMemoryError: Java heap space 

2008-12-28 9:26:44 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:12:52 unknown unknown

嚴重: Error reading request, ignored

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:12:52 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:12:45 unknown unknown

嚴重: Error reading request, ignored

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:11:42 org.apache.catalina.connector.CoyoteAdapter service

嚴重: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:11:05 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:07:10 org.apache.catalina.core.StandardWrapperValve invoke

嚴重: Servlet.service() for servlet aeAction threw exception

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:05:48 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:03:57 org.apache.coyote.http11.Http11Processor process

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 10:12:15 unknown unknown

嚴重: Error processing request

java.lang.OutOfMemoryError: Java heap space

2008-12-28 10:08:58 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process 

嚴重: Error reading request, ignored

java.lang.OutOfMemoryError: Java heap space

2008-12-28 9:53:32 org.apache.coyote.http11.Http11Processor process

嚴重: Error finishing response

java.lang.OutOfMemoryError: Java heap space

還有:

2008-12-19 16:48:05 org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet aeAction threw exception

java.lang.OutOfMemoryError: GC overhead limit exceeded

[aeAction CLOSE] ID:443 9890 [ACTION : ae_get_itm ]

2008-12-19 16:48:15 org.apache.tomcat.util.net.JIoEndpoint$Acceptor run

SEVERE: Socket accept failed

java.lang.OutOfMemoryError: GC overhead limit exceeded

2008-12-19 16:48:15 org.apache.catalina.connector.CoyoteAdapter service

SEVERE: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: GC overhead limit exceeded

2008-12-19 16:48:15 org.apache.catalina.connector.CoyoteAdapter service

SEVERE: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: GC overhead limit exceeded

Exception in thread "http-80-Acceptor-0" java.lang.OutOfMemoryError: GC overhead limit exceeded 

[CLOSE] ID:941 64063 [ACTION : home ]

2008-12-19 16:48:25 org.apache.catalina.connector.CoyoteAdapter service

SEVERE: An exception or error occurred in the container during the request processing 

java.lang.OutOfMemoryError: GC overhead limit exceeded

2008-12-19 16:48:25 org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet qdbAction threw exception

java.lang.OutOfMemoryError: GC overhead limit exceeded

[OPEN ] ID:930 [ACTION : aff_auth ] Fri Dec 19 16:48:41 CST

2008

current stylesheet:

***validDigest=true

***validDateRange=true

load security file servlet

[CLOSE] ID:930 31 [ACTION : aff_auth ]

[OPEN ] ID:14 [ACTION : home ] Fri Dec 19 16:48:41 CST 2008 

[CLOSE] ID:14 16 [ACTION : home ]

2008-12-19 16:48:41 org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet qdbAction threw exception java.lang.OutOfMemoryError: GC overhead limit exceeded 

問題補充:

jvm的記憶體已經設定1G了,估計跟這個沒關.

該問題已經關閉: 超過15天由系統自動關閉,懸賞平分給所有參與回答的會員

問題答案可能在這裡

關于“java.lang.OutOfMemoryError: PermGen space”的問題

JAVA應用Crash錯誤分析

jBPM-JPDL v3.2環境部署——釋出到Tomcat + MySQL

xception in thread "Task-Thread-for-com.mchange.v2

伺服器tomcat異常!!!急啊

回答

這些異常都比較正常,都是拿不到記憶體而引起的。

估計你的應用有記憶體洩露問題,做一個壓力測試,跟蹤一下記憶體使用情況。

taopian (進階程式員) 2009-01-12

有一種解決方案:

修改tomcat記憶體大小,有時候當應用程式所需記憶體大于tomcat所配置設定的最大記憶體時候會報這個錯誤!修改記憶體大小一般能得到解決!

修改代碼如下:

修改tomcat的bin目錄下的Catalina.bat檔案

在166行"rem Execute Java with the applicable properties "以下每行

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 中的%CATALINA_OPTS% 替換成-Xms128m -Xmx512m

注意:需要的話每個tomcat可以都進行設定大小.

tomcat記憶體最大可以支援1024MB

可以配置tomcat叢集來緩解伺服器壓力

houday123 (初級程式員) 2009-01-12

get_mod

auth

ae_get_itm

home

aff_auth

這幾個Action的代碼可能有記憶體洩漏的;仔細檢查下.

最好的辦法是如果有dump檔案,最好了;

Java_options添加如下2個參數;

(JDK要求:1.4.2 update 12以上 或者 5.0 update 7.以上)

-XX:HeapDumpPath=./dumpfile.hprof

-XX:+HeapDumpOnOutOfMemoryError

然後用HeapAnalyser分析下dump檔案; 這樣最直接.

bohemia (架構師) 2009-01-12

硬體問題也會造成 tomcat記憶體溢出

yinxuchina (初級程式員) 2009-01-12

還是分析一些記憶體吧,找到記憶體洩露的源頭。

把記憶體搞大,無非就是能多撐一會而已,:)。

taopian (進階程式員) 2009-01-13

引用

jvm的記憶體已經設定1G了,估計跟這個沒關.

的确是這樣,與這個關系不太,與自己應用的記憶體洩露相關。用JConsole或者JProfile來診斷。

lewhwa (資深架構師) 2009-01-13

-Xms256m -Xmx512m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m

加上這個參數肯定好用

UniverseYuSun (初級程式員) 2009-01-13

首先樓主應該用的是sun或者hp的jdk,其實hp jdk在jvm設計和參數上一直跟sun走的很近,基本都是一樣的,從異常資訊 java.lang.OutOfMemoryError: Java heap space 來看,出現outofmemory,sun跟hp的jdk oom問題,無非兩種情況,一種是heap區用盡,一種是perm區用盡,heap區是用來存儲對象的執行個體,perm區存儲的是class資訊,也就是說,如果應用裡大量使用反射機制,動态生成很多class,則可能需要用-XX:PermSize=xxx 和 -XX:MaxPermSize=xxx來調大一些perm區容量。從目前列印的error log來看,是heap區用盡,針對oom問題,需要綜合考慮業務邏輯和現在記憶體使用情況,如果業務并發較大,應用中使用session,或者cache比較多,則需要較大的heap size,如果并發并不大,則需要檢查是否存在記憶體洩漏情況。如上邊的兄弟所說,可在啟動參數中,%Java_options%添加如下2個參數;

(JDK要求:1.4.2 update 12以上 或者 5.0 update 7.以上)

-XX:HeapDumpPath=./dumpfile.hprof

-XX:+HeapDumpOnOutOfMemoryError

關于jdk版本檢查,可以用 java -version 來看一下

另外,如果oom問題出現的頻率非常低,要隔很長時間才會重制,也就是說,記憶體洩漏比較慢,可以加上jvm參數 -XX:+HeapDumpOnCtrlBreak 這個參數在Sun/HP JDK 1.4.2.11 JDK

1.5.0.05以上版本支援。啟動server後,按ctrl+break應該會生成java_<pid>.hprof.<milltime>的binary檔案,可以用類似heapanalyser這樣的工具來分析是否有記憶體洩漏。

或者還有另外一個辦法,打開jvm的gc log,-Xverbosegc:file=filename,生成的gc log,可以用jmeter來打開分析,主要是看heap size after gc,如果曲線一直在緩慢上升,說明有洩漏問題。