论坛首页 Java版 企业应用

如何解决java内存溢出

浏览 963 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-07-10 关键字: java内存溢出
相信大家在开发过程中一定碰到过内存溢出的情况。
关于解决方案有如下一些:
1.查找程序bug找出内存泄漏的地方
2.引用的包有内存溢出的缺陷或有冲突
3.病毒引起杀毒
4.打补丁
5.优化程序
6.加大堆栈大小
7.加内存

但是即使使用了上述方法仍然有可能会遇到内存溢出的情况,比如说机器总共能存2g,随着访问量的增加,内存总有可能会不够的,这时java垃圾回收机制就会开始回收内存,当回收了也不够时,java进程就会崩掉。

大家是如何防止或者处理这种情况的发生的呢?

比如说以前做windows应用程序有一个可以拦截程序异常的api可以在程序崩掉后拦截到并重启程序,但是java中该怎么做呢,或者有没有其他方法?
   
最后更新时间:2008-07-10
设计请求队列,在同一时间,只能有若干个请求能被处理,其它的请求处于等待状态
   
0 请登录后投票
最后更新时间:2008-07-10
首先确定一下你的应用内存参数是否设置了。

可以通过java 的内存泄漏工具查看一下是否有对象只增长不减少的。
   
0 请登录后投票
最后更新时间:2008-07-10
hrtc 写道


但是即使使用了上述方法仍然有可能会遇到内存溢出的情况,比如说机器总共能存2g,随着访问量的增加,内存总有可能会不够的,这时java垃圾回收机制就会开始回收内存,当回收了也不够时,java进程就会崩掉。


这个说的不对。访问量增加内存不应当会当然的增加(这里考虑的是不可回收的内存),除非存在内存泄露,否则应当是幂等的,即访问多少次都一样。
   
0 请登录后投票
最后更新时间:2008-07-10
我说的是极端的情况,就是假设内存中的所有数据都被引用着而无法释放导致内存溢出,这时该怎么办,我目前想到的是做个守护进程(当java崩掉后重启服务),但不知道java中如何实现,二楼的思路不错,限制访问量直接防止该情况发生。
另外想问下有没有办法让java强制回收有引用的对象,这样应该可以解决问题,另外看到《强烈推荐:著名社交网站LinkedIn的Java架构技术这篇文章里》(http://www.javaeye.com/news/2494)这段话:
8。缓存通过C++实现,用JNI调用,LinkedIn选择C++而不是Java有两个原因:
   1)尽可能的减少RAM的使用
   2)垃圾收集暂停会杀死整个系统,LinkedIn用了最新的GC程序
难道一定要自己重写垃圾回收?
   
0 请登录后投票
最后更新时间:2008-07-10
hrtc 写道
我说的是极端的情况,就是假设内存中的所有数据都被引用着而无法释放导致内存溢出,这时该怎么办,我目前想到的是做个守护进程(当java崩掉后重启服务),但不知道java中如何实现


要在完蛋时做点事的话,可以:
java -XX:OnError=”userdump.exe %p” MyApplication

把那个userdump.exe换成你写的某个.bat程序。这样当java程序因error而退出时,会先调用这个脚本,而后,这个脚又再次运行程序。
   
0 请登录后投票
最后更新时间:2008-07-10
补充一下, -XX:OnError 是SUN的JVM有的参数,其它的JVM不知道有没有,你得查一查啦。
   
0 请登录后投票
最后更新时间:2008-07-10
用监控程序来做更好,让监控程序来处理没有响应或者响应不正常的server

加大内存或者通过修改内存参数只可以改善运行环境,对OOM错误没有太大帮助,除非你确定OOM错误不是程序bug造成的
查找程序bug找出内存泄漏的地方是解决OOM的第一步
同时对内存使用做优化也是很必要的
以前做cach,用到ArrayList,没有考虑到数据的可能大小,在添加到一定量的数据后就OOM,ArrayList在增长的时候默认是double size的,而且是Array,连续内存很容易导致无法分配,这样的OOM最麻烦
   
0 请登录后投票
最后更新时间:2008-07-15
看看你的程序出是不是出现下列情况:
  1.程序与数据库交互的次数是不是太多
  2.临时的变量用完时是否及时销毁,因为即使是垃圾回收也会过一段时间才会收集这些临时变量。
  3.看看你的程序中是否出现在调用一些无用的属性。特别是与数据库交互的时候。
   
0 请登录后投票
最后更新时间:2008-07-15
内存溢出还有一种可能是线程太多任务太复杂,导致CPU消耗太高,GC线程一直wait得不到执行。在IBM虚拟机下更容易遇到
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐