java内存溢出的问题如何排查?

袭烽 2010-06-24 05:44:10
最近项目测试中发现用一会就报java.lang.OutOfMemoryError: Java heap space,程序模块太多,排查起来比较困难,我想应该有一种工具可以很好监控虚拟机当前的状态,甚至帮我找出程序哪个地方最消耗内存,我想从根源上找到问题,不知道有没有好的工具,大家相互推荐下,在此先拜谢了!
...全文
732 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ronniegxq 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dracularking 的回复:]

有一个东西叫 Java memory profiler 不知道好不好
可以判断在程序中哪些方法分配了大量对象,也可以判断有没有被引用或者一开始不分配之类

http://www.khelekore.org/jmp/.
[/Quote]++
JackRui2008 2010-06-25
  • 打赏
  • 举报
回复
jprofile 可以跟踪到内存溢出的原因
dracularking 2010-06-25
  • 打赏
  • 举报
回复
有一个东西叫 Java memory profiler 不知道好不好
可以判断在程序中哪些方法分配了大量对象,也可以判断有没有被引用或者一开始不分配之类

http://www.khelekore.org/jmp/.
dr_lou 2010-06-25
  • 打赏
  • 举报
回复
jdk/bin/jvisualvm
kurama_mail 2010-06-25
  • 打赏
  • 举报
回复
如果你每个模块都有测试用例,直接跑一次就知道了。
如果没有,自己写一个拦截器,将所有模块调用之前的内存使用量和模块名用log打印。
分析log,判断内存泄露的可能方式。
一般来说在 “循环(包括递归)”、“I/O流”、“数据库海量数据存储”等地方比较容易出现。

最后罗嗦一句,做一个项目时最好团队成员一开始就相互做代码check。对技术功底比较弱的人员分配一些风险低的功能。这种项目一开测就出现OutOfMemoryError还算好,要的碰到每跑几周才出现OutOfMemoryError异常的话测试都发现不了。

67,518

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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