一次jdk 1.7 永久带oom信息定位

2018-11-11 线上机器永久带发生了oom,永久带oom大部分有关的就是反射,和类加载器不断新增(我是带着这个思维去找问题)。

2018-11-13 根据线上dump的堆栈信息,定位到发生oom的线程栈

pool-554-thread-5" prio=5 tid=12621 RUNNABLE at java.lang.OutOfMemoryError.<init>(OutOfMemoryError.java:48) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) local variable: java.lang.String#6651822 local variable: byte[]#7709 local variable: java.lang.String#6651823 at com.alibaba.fastjson.util.ASMClassLoader.defineClassPublic(ASMClassLoader.java:42) at com.alibaba.fastjson.parser.deserializer.ASMDeserializerFactory.createStringFieldDeserializer(ASMDeserializerFactory.java:1251) at com.alibaba.fastjson.parser.deserializer.ASMDeserializerFactory.createFieldDeserializer(ASMDeserializerFactory.java:1159) at com.alibaba.fastjson.parser.ParserConfig.createFieldDeserializer(ParserConfig.java:557) local variable: com.alibaba.fastjson.util.FieldInfo#210868 at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.createFieldDeserializer(JavaBeanDeserializer.java:89) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.addFieldDeserializer(JavaBeanDeserializer.java:82) local variable: java.lang.String#4185965 at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.<init>(JavaBeanDeserializer.java:47) local variable: com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer#23419 at com.alibaba.fastjson.parser.ParserConfig.createJavaBeanDeserializer(ParserConfig.java:508) at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:427) at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:354) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:548) local variable: com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl#23614 at com.alibaba.fastjson.JSON.parseObject(JSON.java:250) local variable: com.alibaba.fastjson.parser.DefaultJSONParser#7 at com.alibaba.fastjson.JSON.parseObject(JSON.java:226) at com.alibaba.fastjson.JSON.parseObject(JSON.java:196) 业务信息哪里使用的fastJson

 

2018-11-13 根据业务使用fastJson的方式,将版本和用法稍微模拟在本地环境。

版本:

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.3</version>
    </dependency>

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.1</version>
    </dependency>

 

用法:

Result resultObj = JSON.parseObject("{\"success\":false,\"errorType\":0,\"data\":{\"name\":\"nihao\",\"test\":\"nihao22\"}}", new TypeToken>(){}.getType()); `

2018-11-13 采用放大现象 多线程,几十万次反复调用(其实和线上场景差不多,线上是15个线程,200w次调用)

根据jdk下的jvisualvm,观察: 已装入类,和PermGen区

 

 

发现在疯狂的增长,说明永久带的oom 真有可能是这两个版本,和用法导致的。

使用IBM的分析工具观察Class List: 发现确实在不断的增加FastJsonAsm


为了图快还是先选择升级fastJson 版本先看看有没有问题。

<dependency> 
<groupId>com.alibaba</groupId> 
<artifactId>fastjson</artifactId> 
<version>1.2.47</version> 
</dependency> 

然后重复上述的观察

然后IBM的工具观察:

没有之前的实现方式了,说明新版本已经修复该bug了,最后决定升级版本ok。

fastjson 修复版本公告:https://www.oschina.net/news/86389/fastjson-1-2-34

转载于:https://my.oschina.net/QAAQ/blog/2875684

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值