前几天线上环境出现线程池满,经排查,发现:
jackson-databind:version 2.4.1.1 | 2.4.1
有死循环bug。
https://github.com/FasterXML/jackson-databind/issues/503
https://libereco.cn/posts/study/2016/03/17/jackson-lock/
解决方案:
建议把有问题的版本直接禁用,有问题的版本是这个区间:[2.4.0, 2.4.1.1]
低于 2.4.0 的,LRUMap 的访问被 synchronized 保护,没有问题,只是性能低点。
有问题的版本,LRUMap(实事上是一个 LinkedHashMap) 被读写锁保护,但因为 LinkedHashMap 的读操作里有写操作,所以事实上没有保护住。
高于 2.4.1.1,换成了 ConcurrentHashMap.