又是tomcat内存请教

09-04-13 zhengyj98

现有个很紧急的事情请教一下:

背景:项目在运行3几天之后就出现java内存达到了1G的顶点(是通过windows的任务管理器看到java进程的内存为1G),然后报OutOfMemoryError。后来加入了log记录heap内存的使用情况,发现heap会在某一个时间之后就快速增长,从几十M到1G的过程大概是半个小时左右(按理应该不是某个动作造成的吧,一个动作不可能执行了半个小时之久才使内存暴涨并且jvm不会收)。

因此,我在代码中调用了System.gc(),并且运行了jprofiler4作监控,刚开始的两、三天里,heap都是处于低位平稳地运行,都在100M一下(多数为50M左右),我从自己写的程序中也看到了notheap的内存只有几十M,但是很奇怪的是:从windows任务管理器看到了java进程的内存逐步在升过,200多M、300多M、400多M这样慢慢上升,真是觉得很奇怪,任务管理器的java进程是不是只由heap+notheap组成的,为什么会导致java进程的内存在逐步上升?敬请回复。情况紧急,指请教。

[该贴被admin于2009-04-14 15:03修改过]

banq
2009-04-14 15:03

使用Jprofiler可以具体跟踪到具体应用类的情况,看看以前帖子,你没有找到原因,是因为你不会用Jprofiler

byduke
2009-04-17 01:06

项目内存无限增长一般情况都是使用了STATIC变量保存了一些本该用完就消除的内存空间,或者是存在了APPLICATION中,以前我们一个项目就出现过这样的问题,后来追踪到是因为把用户一些消息存在了一个STATIC的MAP中导致的,时间长了内存不会回收,而且用户不停的发送消息,内存自然就满了