0 0

用ssh架构开发,在tomcat上运行,出现java.lang.OutOfMemoryError: 20

各位帮帮忙,我已在tomcat的startup.bat中设置了:set JAVA_OPTS=-Xms512m -Xmx1024m

但是,只有我一个用户,我自己稍做几步操作,就java.lang.OutOfMemoryError:



请问还有什么原因,会使内存泄漏啊?
2008年6月22日 16:19

24个答案 按时间排序 按投票排序

0 0

采纳的答案

这是我在tomcat的catalina.bat中设的值:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx768m -XX:MaxPermSize=512M -XX:MaxNewSize=512m -XX:MaxPermSize=512m
目前用spring管理上千个bean(dao+service+action),推荐你下载Probe对tomcat进行性能监控

2008年6月23日 18:42
0 0

你同时启动项目过多也会出现

2008年6月26日 13:41
0 0

代码绝对有问题,写成死循环了,还有,在java代码里面最好不要写成递归调用的方式,有可能也会有问题

2008年6月26日 09:37
0 0

首先确定你是操作那几个步骤(或者页面)报错,然后重启服务器,进入圈定的页面(之前要在页面对应的后台程序设置断点)操作调试,检查每一行代码(尤其是涉及数据库调用的代码,有时可能是反复查询早成的),当发生溢出时也不一定就是报错那一行代码的错误。
报错后你要把前面的代码再检查一遍,因为有可能溢出是累积的结果。
内存溢出原因大家都说了很多,无非是数据过多造成的,主要是检查代码的逻辑错误,以及失误造成的,
在检查过程中范围要根据情况适当放大(比如有数据库调用要看下调用的底层代码情况等)
仔细检查应该能找到原因,祝你尽快找到原因

2008年6月25日 23:39
0 0


首先, 我觉得JAVA_OPS你设置的参数值算是 偏大了,对只是开发测试来说。 应该不存在设小的问题 。

其实 ,你也不太担心程序员代码烂,JAVA的内存问题算是解决的好的了。。


以下着手。

1. 多半是全表查询的了数据。
通过数据 监控SQL 比便可知


2. Java里面 死循环操作。
可能有死循环操作。。如果是 unix ,linux 可监控 进程 100% kill-3,然后看日志文件  当前进程的做的操作。
  当然,各个JDK 有所不同。一般估计你用的是SUN的

2008年6月25日 17:05
0 0

我觉得最好的方法,是用JProfiler或是borland的optimizeit suite的跟踪一下,结果应该就可以知道原因了。

2008年6月25日 14:08
0 0

设置一下JAVA_OPTS的参数.

2008年6月25日 10:55
0 0

有一种是在hibernate中查询数据时,提取的数据量太大,造成hibernate OutOfMemory;
一般在5000条的时候就出现这个问题了;

2008年6月24日 19:29
0 0

jprofiler等工具查一下内存使用情况吧,如果使用得合理只有加大JAVA_OPTS的参数.

2008年6月24日 17:58
0 0

内存溢出
一般是代码或者逻辑有问题,
建议用debug相关模块

2008年6月24日 16:57
0 0

楼主,这个你得先分清楚你的OutOfMemory属于哪一种原因,一般常见的有两种,一种是PermSize类,一种是heap space。

如果是PermSize的话,那么,可以利用Java虚拟机参数调整进行调节,相关文章网上一大堆了,不多说了。如果还不够的话,可以扩充服务器的内存。

如果是heap space的话,一般是由于程序中有缺陷导臻内存泄漏,你需要跟踪tomcat的jvm输出日志分析错误原因。我有一篇文章特别说heap space的错误介绍了一个起手势吧,呵呵,看看对你有没有用。

文章地址:http://wap.iteye.com/blog/197354

2008年6月24日 15:03
0 0

肯定是程序的问题,哪个模块出的错,就debug那个模块,可以从登陆开始,一步一步debug

2008年6月24日 09:34
0 0

我分析可能是你的Hibernate在进行数据库操作时发生了 异常,而你又没有及时关闭SESSION造成的。

2008年6月24日 09:16
0 0

一般这样的情况有以下几点:
1. 你使用了hibernate里的一对多关系,而表里的一对多关系过多,造成你数据量一大,循环过多,照成内存占用太多.一般建议不要使用一对多关系,只留下多对一关系
2. 你的对象溢出,没有及时的内存回收,建议用profile进行内存监控.
3. 仔细检查你这几步所输出的对象,是否读出了大量的对象出来

2008年6月24日 00:59
0 0

是否使用了如quartz的对线程有独立处理的工具

2008年6月23日 23:56
0 0

死循环问题的可能性最大,建议你的代码里多加入些debug信息。

2008年6月23日 18:17
0 0

程序代码肯定有问题,比如死循环,造成内存未及时释放

2008年6月23日 18:06
0 0

调大PermSize的值。

2008年6月23日 17:48
0 0

http://localhost:8080/manager/html
看看
VM到底是多少

Free memory: 5.68 MB Total memory: 76.68 MB Max memory: 986.12 MB

2008年6月23日 17:30
0 0

datesetName.close();
statementName.close();
preparementName.close();

2008年6月23日 16:09
0 0

如果没进行内存分配,点几步就内存溢出,那首先可能是系统加载东西过多

如果进行了内存分配,还出现问题,有可能是模块的问题

建议:

如果不确定是哪一模块有问题

把模块卸载掉,看是否还溢出,还溢出,再卸载,只剩下框架

然后再堆加模块,如此跟踪,虽是麻烦,但却有效

2008年6月23日 13:11
0 0

那一定是代码问题了,逐步跟踪一下,看看是不是哪个线程的循环没有退出来
几步就down掉肯定是代码上存在严重缺陷,应该很容易查找,要不你把代码贴出来看看

2008年6月23日 09:28
0 0

代码和逻辑有问题

2008年6月22日 23:31
0 0

通常是死循环照成的。

2008年6月22日 17:22

相关推荐

Global site tag (gtag.js) - Google Analytics