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,如果曲线一直在缓慢上升,说明有泄漏问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值