论坛首页 Java企业应用论坛

解决tomcat outOfMemoryError

浏览 4502 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (13) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-28  

项目中要从其它系统的webservice接口中获取数据,由于那个系统是用.net实现的webservices,返回的是一个xml文档格式的字符串,这个字符串的大小最大有1.2m,在抓取的过程中经常莫名其妙的停下来,也没有异常,后跟断点调试后发现java.lang.OutOfMemoryError: Java heap space。在网上搜了一下得到如下结论:

http://www.zxbc.cn/html/20080505/33993.html

     使用Java程序从数据库中查询大量的数据时出现异常:
java.lang.OutOfMemoryError: Java heap space
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
解决办法:
tomcat_home/bin下catalina.bat(win)或catalina.sh(linux)执行代码前加上:
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m 

 

后又在je的六合江山的博客上的http://webxyz.iteye.com/blog/282569

发现原来还有一个性能监视控制台。

按照其说明安装以后,没有调整堆的大小以前,分配的堆内存是6.2m,难怪出出现OutOfMemoryError

调整后则顺畅运行

   发表时间:2009-03-05  
你加大了Xms/Xmx后有持续测试么
说不定是程序原因导致的
假设你在默认值下跑了一天,溢出了
你调整后,测了一周,发现没问题。
但是可能因为加大的设置,要到一周才出现溢出。
所以还是观察gc的状况,以确定最终原因
0 请登录后投票
   发表时间:2009-03-05  
楼主告诉你个信息
把$JAVA_HOME/bin 下的命令, 都学习一遍, 理解大部分参数, 你会发现自己进步了很多, JVM问题, 基本可以靠这些命令解决。
0 请登录后投票
   发表时间:2009-03-06  
sdh5724 写道

楼主告诉你个信息把$JAVA_HOME/bin 下的命令, 都学习一遍, 理解大部分参数, 你会发现自己进步了很多, JVM问题, 基本可以靠这些命令解决。

谢谢指点!
0 请登录后投票
   发表时间:2009-03-06  
gembler 写道

你加大了Xms/Xmx后有持续测试么说不定是程序原因导致的假设你在默认值下跑了一天,溢出了你调整后,测了一周,发现没问题。但是可能因为加大的设置,要到一周才出现溢出。所以还是观察gc的状况,以确定最终原因

没有持续测试 生产环境是websphere没有这样的问题!
谢谢提醒!
我判断出现这样的问题 是抓取到的字符串为1.16M,Tomcat初始分配的内存为6.2M导致的
0 请登录后投票
   发表时间:2009-03-06  
谢谢二位的指点 看来发布到论坛上还是有帮助的!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics