日期:2014-05-20  浏览次数:20802 次

tomcat 内存 溢出的问题求解 zk+spring+hibernate
很奇怪的问题,在我自己的测试机器上面 xp jdk5 tomcat5.5
运行良好的程序
放到 空间商的虚拟机上 过一段时间 就会内存溢出 挂掉
他们说 他们的配置 没有问题。。。。我这里也运行正常 不知道 该如何解决
空间商环境是 win2003 jdk5 tomcat5.5
我用jrockit-jdk1.5.0 在我的电脑上 检查了程序 无内存泄漏
请高人指教

------解决方案--------------------
怀疑他给你的内存不足以支撑你的系统运行,就是运营商给你的java虚拟机运行的最小和最大内存设置太小。你可以改小本地环境的虚拟机内存试试会不会有这个问题。
------解决方案--------------------
你自己看一下分配给你的内存吧
Java code
在java中,堆(heap)是对象被创建后所驻留的内存区。 

    //获取堆的当前大小,单位为字节(Byte),下同
    long heapSize = Runtime.getRuntime().totalMemory();
   
    // 获取堆内存的最大值,堆所占用的内存不能超过这个值.
    // 否则将导致异常(OutOfMemoryException)
    long heapMaxSize = Runtime.getRuntime().maxMemory();
   
    // 获取堆中空闲内存的大小. 这个值会随着垃圾回收(GC)而增加,    // 也会随着新对象的创建而减小
    long heapFreeSize = Runtime.getRuntime().freeMemory();

------解决方案--------------------
PermGen Space?估计是类存储区不够大。
在运行是加入下面这几个参数试试。
-XX:PermSize=64M
-XX:MaxPermSize=128M

在网上找了一段解释:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果APP会LOAD很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。

有些网页说得很详细:
http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html
http://www.totodotnet.net/2007/08/15/outofmemory%ef%bc%9apermgen-space%e5%bc%82%e5%b8%b8%e7%9a%84%e5%a4%84%e7%90%86%e5%92%8c%e5%88%86%e6%9e%90/
------解决方案--------------------
有没有定时器之类的。去看看