根因:调用 computeIfAbsent 方法时,嵌套调用computeIfAbsent时,如果key的hashCode相同,逻辑中会产生死循环。
现象:
某天发布后,线上cpu飙到100%,线上DB大量大事务无法结束。我们作为底层应用,需要快速解决问题。当时就保留了线程展,然后重启应用,重启后一段时间又出现相同现象,推测是刚发布代码的问题,立即回滚代码。故障恢复。
排查:
1. 逐一排查 线上大事务的sql,寻找规律。
2. 逐行排查发布的代码
3. 分析jstack的线程栈
根因:调用 computeIfAbsent 方法时,嵌套调用computeIfAbsent时,如果key的hashCode相同,逻辑中会产生死循环。
现象:
某天发布后,线上cpu飙到100%,线上DB大量大事务无法结束。我们作为底层应用,需要快速解决问题。当时就保留了线程展,然后重启应用,重启后一段时间又出现相同现象,推测是刚发布代码的问题,立即回滚代码。故障恢复。
排查:
1. 逐一排查 线上大事务的sql,寻找规律。
2. 逐行排查发布的代码
3. 分析jstack的线程栈