关于数据处理
互联网圈子有个怪现象,白天用户高峰,为了将可能的影响降到最低,一些数据处理的工作,一般就放在晚上,所谓的晚上也就十一二点以后吧。
可是程序员哥哥也是需要休息的,当程序数据处理出问题了,就没人处理了,这种要么等夜神运维及时发现,层层打电话找人解决,要么服务直接宕机,造成严重故障或不必要的扩大影响。
怎么避免这种问题呢,?
- 加班到凌晨,甚至睡在公司等数据处理完成再回家,fuck。。
- 保佑🙏数据处理一切正常。
我的观点:
- 在流量低峰处理数据的观点是okay的,无可厚非,但是不一定非要等到夜深人静的时候
- 处理数据的任务不能影响正常的功能(这个必须得保证,不然就忍受熬夜处理问题吧)
- 既然处理数据的任务不影响正常的功能,就可以在非用户高峰时间段的工作时间处理任务。这样的好处是(1)有问题能及时处理(2)不用熬夜,fuck
内存溢出
现象
处理数据的任务,运行一段时间后,内存占用逐渐增加,一直居高不下,到达服务器极限,如果不及时处理,服务随时宕机。
处理
- 停止正在运行的数据处理任务,线上服务器重启,释放内存。
- 开发环境,运行数据处理任务,jvisualvm观察gc情况,确实占用内存不断彪高,
- 堆dump,查看堆内容,发现50%+是存数据的Map
对象
- 问题定位,内存里太多承载数据的对象没有及时被处理,导致内存耗尽。
解决方法
- 处理数据的任务需要异步执行,使用线程池
- 线程池任务处理时再加载数据(这点很重要)