Tomcat OutOfMemory是什么引起的?正常吗?

Jikycc 2010-08-30 01:11:48
本机调试,大概2-3天会出现一次OutOfMemory,是有内存或session没释放吗?
...全文
498 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
108041217 2010-09-09
  • 打赏
  • 举报
回复
catalina.bat 中加
set JAVA_OPTS="-Xms1024m -Xmx1024m"
catalina.sh 中加:
JAVA_OPTS="-Xms1024m -Xmx1024m"
niu90 2010-09-02
  • 打赏
  • 举报
回复
内存设置太小了吧,查询出来的数据又太大的话就溢出喽....
whut_lcy 2010-09-02
  • 打赏
  • 举报
回复
其实数据库连接也好,hibernate的session没关闭也好,都不至于把LZ的tomcat内存耗完,并发情况下,最多数据库连接无法获取到。何况楼主还是本机调试。

结合本人自己的实例,可以说明:是由于LZ的业务代码中大量使用了集合。

最近用hibernate+tomcat6 + mysql做了一个报表处理工具,处理的数据源是上百万条的PDM。由于报表处理流程比较复杂,中间数据非常多,故而大量使用java的集合框架进行缓存(有考虑过用mysql的存储过程,但mysql的存储过程语法太复杂,不如sqlserver,oracle等那么方便编写,故而作罢)。最终数据将导出为EXCEL(65536行一下)或CSV(超过65536)。

在myeclipse下调试,反应很慢,到最后抛出内存不够的错误。发布到tomcat下,问题依旧存在。
修改tomcat的jvm参数,初始内存521M,最大内存1024M(tomcat默认的具体不记得多少了,但是不会超过64M)。
问题OK。
修改方法,楼上有人说了。



shaccpsh 2010-09-02
  • 打赏
  • 举报
回复
如果是用 MyEclipse,在配置tomcat 下面的JDK里设参数,

-Xmx512m
Jikycc 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 niu90 的回复:]

内存设置太小了吧,查询出来的数据又太大的话就溢出喽....
[/Quote]
在哪儿看我设置的内存呢
kokobox 2010-09-01
  • 打赏
  • 举报
回复
导致这个原因很多,要全面检查才知道是哪里引起的

  • 打赏
  • 举报
回复
不正常!

不过可以确定的是,这基本上是由于编码造成的错误!

比如:在某个集合中塞入了数万乃至数十万的数据;在 HttpSession 中存入了大量的数据,而且此时访问量有点高。
铁匠梁 2010-09-01
  • 打赏
  • 举报
回复
在 OM 时把内存堆栈输出到文件,然后分析之……
lyliuyang46336247 2010-09-01
  • 打赏
  • 举报
回复
如果是tomcat 在配置文件中把内存调成512的吧
zhuiyunyiye 2010-09-01
  • 打赏
  • 举报
回复
hehe
fang00y 2010-09-01
  • 打赏
  • 举报
回复
jconsole.exe

找找是哪里的内存泄露~
toss2000 2010-09-01
  • 打赏
  • 举报
回复
关注 帮顶 !
Jikycc 2010-09-01
  • 打赏
  • 举报
回复
我的每一个DAO包都是继承一个公共的HibernateSessionFactory类,每次new一个DAO的对象之后需要关闭吗?
例如:

TypeDAO typeDao = new TypeDAO();
List <Type> typeLst = typeDao.findByAll();

List <NewType> newLst = new ArrayList();

Iterator it = typelst.iterator();
while(it.hasNext()){
Type t = (Type)it.next();
NewType newType = new NewType();
newType.setType(t.getType());
newType.setName("aa");
newLst.add(newType);
}
request.setAttrabute("Type",newLst);//将新的记录通过request传到Jsp页面显示

请问:这几个new的对象都怎么清楚啊?typeDao 、typeLst和newLst
liufeng0209 2010-08-31
  • 打赏
  • 举报
回复
在catalina.bat第一行写上
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m
Jikycc 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 epiphone 的回复:]
Windows 下,在文件 {tomcat_home}/bin/catalina.bat , Unix 下,在文件 {tomcat_home}/bin/catalina.sh 的前面,增加如下设置:

   JAVA_OPTS='-Xms 【初始化内存大小】 -Xmx 【可以使用的最大内存】 '

  需要把这个两个参数值调大。例如:

rem ----- Execute The Requested Command ---------------------------------------

set JAVA_OPTS='-Xms256m -Xmx512m'

1G内存环境下java jvm 的参数设置参考:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true

  表示初始化内存为 256MB ,可以使用的最大内存为 512MB 。
[/Quote]

在bin下面的catalina.bat要自己写吗?
hoojo 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jikycc 的回复:]

1、报的就是PermGen outofmemory
2、我用的是一个公用的sessionFactory类
[/Quote]

把你tomcat的内存设置大写即可
当然换个tomcat也许可以搞定,绿色版的v5.0.28不错
108041217 2010-08-31
  • 打赏
  • 举报
回复
catalina.bat 中加
set JAVA_OPTS="-Djava.security.auth.login.config=..\conf\jaas.conf -Xms1024m -Xmx1024m"
catalina.sh 中加:
JAVA_OPTS="-Djava.security.auth.login.config=../conf/jaas.conf -Xms1024m -Xmx1024m"
qingyuan18 2010-08-31
  • 打赏
  • 举报
回复
内存泄露,挑战楼主调优功底的时候到了

JProfile看哪一类对象持续增长并没有在垃圾收集时减少,查找生成这个对象的代码,看是否循环引用(比如List里面的东西又被外面的类引用),文件IO没有释放。。。。。
qq14017152 2010-08-31
  • 打赏
  • 举报
回复
我也经常遇到这问题,把tomcat重新启动,项目重新部署就好了,不是很麻烦
hanshuihu 2010-08-31
  • 打赏
  • 举报
回复
换个版本的Tomcat试试 我以前用的那个版本就那样 部署三次必崩溃 (内存溢出) 后来换电脑重下了个新版本的 就没事了, 你可以去下新版Tomcat 试试
加载更多回复(13)

81,117

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧