本文主要是介绍因为使用ArrayList.removeAll(List list)导致的机器重启,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景
先说一下背景,博主所在的业务组有一个核心系统,需要同步两个不同数据源给过来的数据到redis中,但是每次同步之前需要过滤掉一部分数据,只存储剩下的数据。每次同步的数据与需要过滤掉的数据量级大概在0-100w的数据不等。
由于是两个数据源,虽然拿到数据后存数据的代码能共用,但是从数据源拿数据由于协议不同所以还是需要分开写,就安排了两位同事完成这个任务。
重启现象
项目上线大半年,线上运行一直很平稳,突然在某一天ops开始报警该系统的两台机器一直在重启,cpu也一直报警,线上cpu监控如下所示:
机器也处于不断重启中:
两台机器表现几乎一致,于是马上重启一台机器,另外一台机器抓取一下线程详情。直接用下面的火线图更明显:
可以看到几乎80%的cpu都在做一件事情:ArrayList.removeAll(),根据线程栈找到了线上的代码大致如下:
下班了。明天更
这篇关于因为使用ArrayList.removeAll(List list)导致的机器重启的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!