[alibaba/fastjson]反序列化导致cpu 100%

2025-11-25 718 views
5

fastjson版本1.2.27 在使用反序列化时,代码如下: String detail=*** Map<String,String> parameters = JSON.parseObject(detail, Map.class); 生产环境,反序列化请求参数时,查看cpu使用率非常高,此时请求tps 约在200左右, cpu情况:

Cpu0  : 98.3%us,  0.3%sy,  0.0%ni,  1.0%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st   
Cpu1  : 97.3%us,  1.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st  
Cpu2  : 97.3%us,  1.0%sy,  0.0%ni,  1.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu3  : 98.3%us,  0.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st  
Cpu4  : 98.3%us,  0.3%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu5  : 98.7%us,  0.7%sy,  0.0%ni,  0.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu6  : 98.0%us,  0.3%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st  
Cpu7  : 98.7%us,  0.3%sy,  0.0%ni,  1.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

查看进程中线程占用cpu高的堆栈如下:

http-apr-8900-exec-78" #114 daemon prio=5 os_prio=0 tid=0x00007fdf5c265000 nid=0x410b runnable [0x00007fdef74f0000]
   java.lang.Thread.State: RUNNABLE
        at com.alibaba.fastjson.parser.JSONLexerBase.skipComment(JSONLexerBase.java:562)
        at com.alibaba.fastjson.parser.JSONLexerBase.skipWhitespace(JSONLexerBase.java:3153)
        at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:577)
        at com.alibaba.fastjson.parser.deserializer.MapDeserializer.deserialze(MapDeserializer.java:58)
        at com.alibaba.fastjson.parser.deserializer.MapDeserializer.deserialze(MapDeserializer.java:39)
        at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:645)
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:350)
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:254)
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:467)

请问这是什么原因导致的

回答

8

testcase:

  String test = "{msg:\"活动id:1294;originURL:\"https://*.**.com/12233\"}";

基本上已经确定是skipComment中死循环导致了

4

嗯,升级至1.2.32 ,问题解决

9

@dongxingong @wenshao issue对应修改代码的地方可以贴出来么?