java 内存溢出,找不到具体原因,请大家帮忙看看?

Rush_2008 2010-09-25 05:41:45

IBM jdk 1.42

运行环境是 websphere

我分析了下gc回收文件,发现内存是不断上升的,一般是2-3天就到了最大值2G,然后就内存溢出了。

但是通过gc回收文件看不出具体是哪个对象占用内存。我也分析了heapdump,同样也看不出来。有没有可以动态监控内存的使用情况的工具?或者大家有其他更好的方法。

另外程序有一个静态数据集 static Vector vc ,程序经常会大批量的向里面添加对象,使用完后也会remove掉。我认为这样应该会被回收掉吧,请大家帮忙看看。
...全文
381 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
solosky772 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 rush_2008 的回复:]
引用 10 楼 eraserpro 的回复:

都有dump了,没理由找不出问题的,找到占用量最大的对象,查看下都是被什么东西引用的
重点关注各类static的Vector,ArrayList,Map



确实是有大量对象是被static ArrayList引用。不过程序是会remove里面的对象的,是不是因为ArrayList是static的,所以尽管remove了,但是还是清除……
[/Quote]
这个和static没什么关系吧,static只是说明ArrayList是静态的无法释放,但里面的元素是new出来的,remove了里面的元素就释放了。建议你检查下remove的逻辑是否有问题。
Rush_2008 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 eraserpro 的回复:]

都有dump了,没理由找不出问题的,找到占用量最大的对象,查看下都是被什么东西引用的
重点关注各类static的Vector,ArrayList,Map
[/Quote]


确实是有大量对象是被static ArrayList引用。不过程序是会remove里面的对象的,是不是因为ArrayList是static的,所以尽管remove了,但是还是清除不掉引用,内存空间还是没有释放。
Rush_2008 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 solosky772 的回复:]

引用 21 楼 rush_2008 的回复:
引用 10 楼 eraserpro 的回复:

都有dump了,没理由找不出问题的,找到占用量最大的对象,查看下都是被什么东西引用的
重点关注各类static的Vector,ArrayList,Map



确实是有大量对象是被static ArrayList引用。不过程序是会remove里面的对象的,是不是因为ArrayList是s……
[/Quote]

我调用的就是ArryaList类的remove方法。
darrenluo 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 rush_2008 的回复:]

谢谢,大家的帮助!

我分析了下heap dump ,占用大量内存的是几个类

org/apache/xerces/dom/Texlmpl
org/apache/xerces/dom/ElementImpl
org/apache/xerces/dom/ElementNSImpl
org/apache/xerces/dom/AtrributeMap
……
[/Quote]

我也遇到过内存泄露的问题,查了好久发现时webService引起的
我用的是axis2 1.4.1,这个版本bug
客户端的stub改成单例就行了
budetcbc011 2010-10-11
  • 打赏
  • 举报
回复
运行中输入 jconsole
24K純帥 2010-09-29
  • 打赏
  • 举报
回复
学习额。。
铁匠梁老师 2010-09-28
  • 打赏
  • 举报
回复
都还没用过,jmap的好使,然后就使用mat工具分析dump文件
suntingtingonly 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 cenhuineng 的回复:]

还有一种情况希望对楼主有用··就是import的时候不能只引用到包·然后就一个通配符··我的曾经测试过·程序到后面比那些具体引用类的程序占用的内存要大很多··
[/Quote]

想问下 如果用* 的话 不是只用到自己 用到的那个吗? 难道是把所有的引入了。。
凉岑玉 2010-09-28
  • 打赏
  • 举报
回复
还有一种情况希望对楼主有用··就是import的时候不能只引用到包·然后就一个通配符··我的曾经测试过·程序到后面比那些具体引用类的程序占用的内存要大很多··
Rush_2008 2010-09-28
  • 打赏
  • 举报
回复
在线等
Rush_2008 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 windforcecn 的回复:]

引用 11 楼 rush_2008 的回复:

谢谢,大家的帮助!

我分析了下heap dump ,占用大量内存的是几个类

org/apache/xerces/dom/Texlmpl
org/apache/xerces/dom/ElementImpl
org/apache/xerces/dom/ElementNSImpl
org/apache/xerces/dom/Atrr……
[/Quote]


程序中 没有去解析dom,只是用到了axis,不是webservice会自己去调用到xerces
windforcecn 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 rush_2008 的回复:]

谢谢,大家的帮助!

我分析了下heap dump ,占用大量内存的是几个类

org/apache/xerces/dom/Texlmpl
org/apache/xerces/dom/ElementImpl
org/apache/xerces/dom/ElementNSImpl
org/apache/xerces/dom/AtrributeMap
……
[/Quote]

dom?

你里面解析了dom文件没有?是怎么做处理的?
zqfddqr 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dr_lou 的回复:]
sun jdk 有jvisualvm.exe 和 jconsole.jar
[/Quote]十分的严重的顶 用过 很好使
zcp1985 2010-09-27
  • 打赏
  • 举报
回复
借个位置得点分
Rush_2008 2010-09-27
  • 打赏
  • 举报
回复
谢谢,大家的帮助!

我分析了下heap dump ,占用大量内存的是几个类

org/apache/xerces/dom/Texlmpl
org/apache/xerces/dom/ElementImpl
org/apache/xerces/dom/ElementNSImpl
org/apache/xerces/dom/AtrributeMap

另外我程序是通过webservice用的是axis,接收到消息,然后把消息存入到一个statice ArrayList里,待我从队列中取出消息处理后,我会remove掉ArrayList里的消息。我现在担心的是在静态集合里的对象是不是gc会回收得比较慢,所以导致内存溢出了

youjianbo_han_87 2010-09-26
  • 打赏
  • 举报
回复
有数据库的话,多半是数据库问题。。。请检查。。。
licip 2010-09-26
  • 打赏
  • 举报
回复
会不会是你有资源没有关影起的。
Ade子夜 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dr_lou 的回复:]
sun jdk 有jvisualvm.exe 和 jconsole.jar
[/Quote]
关注
dr_lou 2010-09-26
  • 打赏
  • 举报
回复
sun jdk 有jvisualvm.exe 和 jconsole.jar
Rush_2008 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 clariones 的回复:]

我常用的方法是用JMAP, 用jmap -histo <pid> 把对象数量打印出来。
我写了一个脚本,每隔一段时间就打印信息,然后按照时间改名,收集到一定数量的数据后,我还有一个小程序,按照类名比较,分析数据趋势,变化不大的就删掉,变化乱的就存到一个excle文件里,然后用excle的图表功能,对可疑的类画时间-数量图,找出最有泄露嫌疑的,然后看代码。
[/Quote]

jmap 是jdk 1.42里自带的?
加载更多回复(4)

62,614

社区成员

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

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