`
yinwufeng
  • 浏览: 277684 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一例OOM的排查过程

阅读更多

一例OOM的排查过程(新人首贴)

2010年7月22日 由 wuyun 留言 »

组里的美女同事在搭建性能测试环境时遭遇了OutOfMemoryError,做Java,做性能遇到OOM本是常事,不过这次的原因还是第一次碰到,分享一下我们的思路:

  1. 确认OOM的具体类型。  一般来讲,OOM常见的有unable to create new native thread、Out of swap space、Java heap space、GC overhead limit execeeded、PermGen space,不同类型的分析处理思路不同。 本次OOM是其中最为常见的一种:java.lang.OutOfMemoryError: Java heap space
  2. 根据“Java heap space”类型,我的第一反应是确认JVM参数的正确性,于是让美眉check了一下Xmx参数,没问题,1536m
  3. 然后美眉准备用MAT分析heap dump文件(启动参数事先已设置了HeapDumpOnOutOfMemoryError),我这时注意到该dump file大小只有几十兆,于是建议放弃分析dump,意义不大
  4. 尝试jmap -histo多次采样来查看占用空间最多的对象类型,看到原生类型的占用较多,又是死胡同,ft
  5. 只好转向进一步分析应用log,在经过若干次尝试后,发现每次OOM时的stack trace很固定,都是形如:

java.lang.OutOfMemoryError: Java heap space
Caused by:
java.lang.OutOfMemoryError: Java heap space
 at com.taobao.tair.packet.BasePacket.readString(BasePacket.java:73)
 at com.taobao.tair.packet.ResponseGetGroupPacket.decode(ResponseGetGroupPacket.java:55)
 at com.taobao.tair.comm.TairClient.invoke(TairClient.java:140)
 at com.taobao.tair.impl.ConfigServer.retrieveConfigure(ConfigServer.java:116)
 at com.taobao.tair.impl.DefaultTairManager.init(DefaultTairManager.java:78)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1237)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1203)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1167)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)

于是大胆怀疑与tair相关,首先确认了tair server的健康状态后,结合最近搭建环境的变动,进一步怀疑到是配置文件中关于tair的配置相关,最终验证了这一猜想。
总结一下,OOM要根据具体问题具体分析,不要一味怀疑是应用代码或Xmx的问题。就像本次OOM中,曾求助相关应用开发人员,他一直在尝试调整Xmx参数大小,思路不对,甚至准备重新build部署应用…

VN:F [1.9.3_1094]
Rating: 5.5/10 (2 votes cast)
一例OOM的排查过程(新人首贴), 5.5 out of 10 based on 2 ratings 转载务必注明出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=7780
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics