论坛首页 Java企业应用论坛

如何定位OutOfMemory的根本原因

浏览 18936 次
精华帖 (0) :: 良好帖 (11) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-22   最后修改:2011-07-22
kakaluyi 写道
sunnycare 写道
看了下好像都是针对heap 区溢出的。。perm区溢出有什么定位的方法么?

前一阵把应用从weblogic8.1移到weblogic10.3就perm溢出了,找了weblogic的工程师也不知道什么原因。

 


app是否用到了很多动态加载新的类,或者维护一个很大的常量池,我觉得由于8.1移植10.3导致的问题可能由于

1两个版本 APP 启动参数 -XX:MaxPermSize 是否不一致

2weblogic10.3动态加载更多的类导致程序需要占用的PermSize比原先大(这个需要weblogic support来协助)

3看看OutOfMemoryError: PermGen space是在启动weblogic的时候还是app运行时候产生的,如果是启动weblogic时候产生的话我觉得就是由于weblogic本省导致的

可以看看发生OutOfMemoryError前后的堆栈信息,是否正在使用第三方jar做一些加载操作

 

app、应该说没有用到很多动态加载类的,至少比方说没有用spring这种开源框架。也没有很大的常量池。

现在perm区是稳定的每天增长3M,基本通过例行维护重启来规避风险。

oracle的工程师说是String.intern的原因造成的,但是查了应用所有源码,并且反编译了所有引用到的第三方jar,发现也就是log4j有intern方法,但是这块东西以前在weblogic8.1上也用,以前没有问题。后来做了针对性的性能测试,也没有发现异常。

 

倒是weblogic自身的jar包中有很多用到了intern方法。weblogic也无法证实是否有影响。

 

而且更奇怪的是,测试环境大压力7*24测试都没有泄露。奇了怪了。

 

另外这次换中间件,发现weblogic10.3.1有bug,只要一开snmp服务,不管用不用,heap就会有内存泄露,而且量挺大的,我们是一天30M,后来打了补丁才解决。

 

就是不知道有什么工具可以看perm区的映像,如果能看,问题就好办了,可惜oracle说看不了。ft

 

 

 

 

 

 

0 请登录后投票
   发表时间:2011-07-22  
sunnycare 写道
kakaluyi 写道
sunnycare 写道
看了下好像都是针对heap 区溢出的。。perm区溢出有什么定位的方法么?

前一阵把应用从weblogic8.1移到weblogic10.3就perm溢出了,找了weblogic的工程师也不知道什么原因。

 


app是否用到了很多动态加载新的类,或者维护一个很大的常量池,我觉得由于8.1移植10.3导致的问题可能由于

1两个版本 APP 启动参数 -XX:MaxPermSize 是否不一致

2weblogic10.3动态加载更多的类导致程序需要占用的PermSize比原先大(这个需要weblogic support来协助)

3看看OutOfMemoryError: PermGen space是在启动weblogic的时候还是app运行时候产生的,如果是启动weblogic时候产生的话我觉得就是由于weblogic本省导致的

可以看看发生OutOfMemoryError前后的堆栈信息,是否正在使用第三方jar做一些加载操作

 

app、应该说没有用到很多动态加载类的,至少比方说没有用spring这种开源框架。也没有很大的常量池。

现在perm区是稳定的每天增长3M,基本通过例行维护重启来规避风险。

oracle的工程师说是String.intern的原因造成的,但是查了应用所有源码,并且反编译了所有引用到的第三方jar,发现也就是log4j有intern方法,但是这块东西以前在weblogic8.1上也用,以前没有问题。后来做了针对性的性能测试,也没有发现异常。

 

倒是weblogic自身的jar包中有很多用到了intern方法。weblogic也无法证实是否有影响。

 

而且更奇怪的是,测试环境大压力7*24测试都没有泄露。奇了怪了。

 

另外这次换中间件,发现weblogic10.3.1有bug,只要一开snmp服务,不管用不用,heap就会有内存泄露,而且量挺大的,我们是一天30M,后来打了补丁才解决。

 

就是不知道有什么工具可以看perm区的映像,如果能看,问题就好办了,可惜oracle说看不了。ft

 

 

 

 

 

 


实在不行用weblogic的其他问题版本试试,我们也是升级到Jboss最新版本曾经出了一个JBoss自己的内存泄露问题,和他们support扯皮了很久才解决,坚决不当小白鼠。
0 请登录后投票
   发表时间:2011-07-23  
换也没那么容易。
我只想找到处理和分析的法子。。
0 请登录后投票
   发表时间:2011-07-23  
huxi 写道
zhanzhan02 写道
michael.softtech 写道
可以参考一下淘宝的林昊写的<Java 分布式开发与实践> .里面对于jvm的内存模型以及调优解释得还是蛮清楚的


不知道仁兄看了没 真的不错么?我看了好几遍。

正在读,不过不管怎么样,还是学到了很多东西,如果讲的更深一些就更好了。

OOM 很大程度上是靠累积的经验。。书上都是概念性东西。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics