锁定老帖子 主题:如何定位OutOfMemory的根本原因
精华帖 (0) :: 良好帖 (11) :: 新手帖 (6) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-22
最后修改:2011-07-22
kakaluyi 写道
sunnycare 写道
看了下好像都是针对heap 区溢出的。。perm区溢出有什么定位的方法么?
前一阵把应用从weblogic8.1移到weblogic10.3就perm溢出了,找了weblogic的工程师也不知道什么原因。
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
|
|
返回顶楼 | |
发表时间:2011-07-22
sunnycare 写道
kakaluyi 写道
sunnycare 写道
看了下好像都是针对heap 区溢出的。。perm区溢出有什么定位的方法么?
前一阵把应用从weblogic8.1移到weblogic10.3就perm溢出了,找了weblogic的工程师也不知道什么原因。
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扯皮了很久才解决,坚决不当小白鼠。 |
|
返回顶楼 | |
发表时间:2011-07-23
换也没那么容易。
我只想找到处理和分析的法子。。 |
|
返回顶楼 | |
发表时间:2011-07-23
huxi 写道 zhanzhan02 写道 michael.softtech 写道 可以参考一下淘宝的林昊写的<Java 分布式开发与实践> .里面对于jvm的内存模型以及调优解释得还是蛮清楚的
不知道仁兄看了没 真的不错么?我看了好几遍。 正在读,不过不管怎么样,还是学到了很多东西,如果讲的更深一些就更好了。 OOM 很大程度上是靠累积的经验。。书上都是概念性东西。 |
|
返回顶楼 | |