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

Jikycc 2010-08-30 01:11:48
本机调试,大概2-3天会出现一次OutOfMemory,是有内存或session没释放吗?
...全文
489 34 打赏 收藏 转发到动态 举报
写回复
用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)
测试管理与QualityCenter培训手册 1、测试流程管理、测试度量方法 按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。就测试过程本身而言,应该包含以s下几个阶段。  -测试需求的分析和确定。  -测试计划。  -测试设计。  -测试执行。  -测试记录和缺陷跟踪。  -回归测试。  -测试总结和报告。 一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试管理必须仔细思考的问题。缺乏尺度会让测试失去平衡,缺乏标准会让测试工作难以衡量。 2、如何搭建测试管理平台? 首要问题是流程的规范化。 (1) 测试进入和退出标准。 (2) 协作流程。 (3) 缺陷跟踪管理流程。 (4) 工具平台的引入。 目前主流测试管理平台与缺陷跟踪工具: 3、QC(Quality Center)介绍 QC标准测试管理流程 QC支持的应用服务器:Jboss、WebLogic、WebSphere QC支持的数据库:Oracle、SQLServer QC支持的操作系统:Windows、Linux、Solaris 支持群集: 服务器端硬件和数据库要求: Windows: Linux: Solaris: 客户端系统要求: 练习1:安装QC 详见《Mercury Quality Center 9.0 Installation Guide》 Win2003+SQLServerSp4+QC9.0安装示例 1、安装Windows Server 2003 Enterprise Edition、安装IIS邮件服务器 2、安装SQL Server 2000、打上补丁Sp4 安装好SQL Server 2000后注意启动SQLServer服务器 3、安装QC9.0 服务器名称也可以是IP地址 4、启动QC9.0 5、QC9.0安装问题解决 - JBOSS启动不了 原因:8080端口被其他应用程序占用。 用netstat查看谁占用了8080端口 netstat -ano 解决办法1:修改其他程序的端口使用 解决办法2:修改JBOSS的启动端口 JBOSS_HOME\server\default\deploy\jbossweb-tomcat55.sar\server.xml 6、修改IP地址后不能登录QC 解决办法: 在C:\Program Files\Mercury\Quality Center\jboss\server\default\deploy目录下找到10sabin.war 进入10sabin.war\WEB-INF,修改siteadmin.xml中的IP地址: 修改数据库中的数据: 修改后可以登陆 但是还需要修改以前Project的数据库连接属性 否则会提示错误 然后还要修改 C:\Program Files\Mercury\Quality Center\repository\qc中的dbcon.txt: qcsiteadmin_db@192.168.1.12.1433. 还有 C:\Program Files\Mercury\Quality Center\repository\qc\Default\QualityCenter_Demo_db中的dbid.xml 192.168.1.12 7、Mercury Tours 样例程序 启动:http://192.168.1.2:8080/mtours 注意安装JVM才能“View Calendar” 4、创建和定义测试需求、测试需求管理、跟踪 定义需求 1、查看需求 视图->需求树 2、添加需求 需求->新建需求 输入以下内容 3、添加子需求项 查看需求 ZooIn : CTRL + I ZooOut : CTRL + O 视图->编号 视图->需求网格 视图->筛选/排序->设置筛选器/排序 设置排序字段 设置过滤条件 修改需求 拷贝需求项Cruise Reservation 重命名需求项Cruise Reservation_Copy_1为Hotel Reservation 移动需求项

81,090

社区成员

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

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