内存溢出的坑

关于数据处理

互联网圈子有个怪现象,白天用户高峰,为了将可能的影响降到最低,一些数据处理的工作,一般就放在晚上,所谓的晚上也就十一二点以后吧。

可是程序员哥哥也是需要休息的,当程序数据处理出问题了,就没人处理了,这种要么等夜神运维及时发现,层层打电话找人解决,要么服务直接宕机,造成严重故障或不必要的扩大影响。

怎么避免这种问题呢,?

  • 加班到凌晨,甚至睡在公司等数据处理完成再回家,fuck。。
  • 保佑🙏数据处理一切正常。

我的观点:

  • 在流量低峰处理数据的观点是okay的,无可厚非,但是不一定非要等到夜深人静的时候
  • 处理数据的任务不能影响正常的功能(这个必须得保证,不然就忍受熬夜处理问题吧)
  • 既然处理数据的任务不影响正常的功能,就可以在非用户高峰时间段的工作时间处理任务。这样的好处是(1)有问题能及时处理(2)不用熬夜,fuck

内存溢出

现象

处理数据的任务,运行一段时间后,内存占用逐渐增加,一直居高不下,到达服务器极限,如果不及时处理,服务随时宕机。

处理

  • 停止正在运行的数据处理任务,线上服务器重启,释放内存。
  • 开发环境,运行数据处理任务,jvisualvm观察gc情况,确实占用内存不断彪高,
  • 堆dump,查看堆内容,发现50%+是存数据的Map

    对象
  • 问题定位,内存里太多承载数据的对象没有及时被处理,导致内存耗尽。

解决方法

  • 处理数据的任务需要异步执行,使用线程池
  • 线程池任务处理时再加载数据(这点很重要)
0 0 投票数
Article Rating
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x