原文地址:https://www.smoker.cc/java/fuck-fastjson.html
前两天新加需求修改代码,本地没问题。部署测试环境,运行一段时间后,就发现响应特别慢,CPU 飙高。观察了下,是内存不够用,服务疯狂 GC,导致 CPU 飙高,最终 OOM 进程挂掉。于是加了启动参数,OOM 时 dump 出堆内存快照 hprof 文件,分析了下。
上图是用 VisualVM 软件分析的,怀疑是 http-nio-8005-exec-1 线程有问题,点击链接查看:
我擦,这不是 fastjson 么?修改的代码是用到了 fastjson 的反序列化功能。
然后继续观察,确实是新增的这个类引起的。具体成因可参考这篇文章。
然后以 内存溢出 搜索 fastjson 在 Github 上的 issue 列表,还有 open 的 issue。官方推荐升级版本,但是有的人反馈升级新版本之后还会有问题。
既然升级新版本反序列化还有可能会有问题,并且我试着升级了下最新版本,有些方法兼容性也有问题。那算啦,反序列化改用其他的库吧。
对于反序列化部分,用 Gson 作了替代:
1
2
3
4
5
6
// import com.google.common.reflect.TypeToken;
TypeToken typeToken =newTypeToken>() {};
// import java.lang.reflect.Type;
Type type = typeToken.getType();
List<User> users = gson.fromJson(json, type);