net.sf.json:2.4 性能问题

服务器CPU频繁满载告警,经排查发现是后台应用中net.sf.json库在将String转json时性能低下,导致大量资源占用。切换到jackson后问题解决,性能恢复正常。建议选用大厂开源的技术以保障性能。
起因:

月初这几天,某台服务器cpu频繁满载告警。
由于该台服务器部署了两个应用,一个web,一个后台。在凌晨先后启停服务后确定是后台应用导致。然后后台应用已经跑了很长时间,基本没有出过问题,怎么突然就出问题了呢?

定位:

联系相关开发人员,是最近有个适配改动了十几行代码。我想应该就是这几行代码导致的。和他一起review了他的代码,然而并没有发现代码有什么明显的改动。

去服务器看看,
使用jps查看java进程,获取到pid=31793,通过
jmap -histo 31793 > 1.txt
命令将内存中的对象信息输出到文件中,在这里插入图片描述
通过less查看发现,有内存中有十几万个该对象,正好,这个对象是改动的代码部分,但是实际考虑数据量及结合代码逻辑,不应该产生这么多对象。
使用
ps -mp 31793 -o THREAD,tid,time
命令获取java进程中各线程对CPU资源的使用情况:
在这里插入图片描述
发现,有3个鬼鬼祟祟的线程tid=31813,31814,31815占用了大量资源。将tid转换为16进制
printf "%x\n" 31813
16进制thread-id:7c45
从当前堆栈信息查看此线程

jstack 31793 > 2.txt

然后在2.txt文件中搜索7c45线程。
在这里插入图片描述
可以看到,占用大量资源的线程是在调用
JSONObject billData = JSONObject.fromObject(bd.getData());
将String转json时占用大量资源。
于是决定使用fastjson或者其他json来解决问题。
换用jackson后:业务恢复,cpu使用率正常。

其他:

本想继续看一看net.sf.json的源码,奈何不是org项目,无奈只能到此。以后技术的选用方面应该向大厂开源的靠拢。

测试了下性能:

10w个简单对象的json反序列化。

sf json:耗时788
fast json:耗时132

差距还是很大的
附测试代码:

import net.sf.json.JSONObject;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class TestSFjson {
   
   
    public 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值