微信粉丝数据同步任务引起的OOM记录
1、问题现象
2、内存分析
3、问题分析
3.1、问题一
根据上述内存对象分析出是同步微信客户的JOB执行时产生的数据,但是同步微信客户的JOB每天凌晨1点执行,为什么今天15:30还在执行?
根据内存快照中的数据,查询日志发现,wxfe9d9163861a7cf4(广州壳牌)公众号一共有335w+的数据,从凌晨1点一直执行到15:30
3.2、问题二
内存快照中显示List中有1000w+的openId,这个数据怎么来的?
上述代码的流程是:每次查10000个openId,然后每次根据100个openId查询微信客户信息,然后处理这100个微信客户信息。看代码似乎没有内存泄漏的地方。
每次处理100个公众号粉丝时,会把这些客户的openId放入redis的队列中
全部公众号用户处理完后,会合并公众号用户和小程序用户,此时会从redis中取出队列中的所有值,按理应该是335w+的openId,但是现在内存里有1000w+的openId。
4、问题原因
redis的key的有效期是12小时,但由于该公司同步微信客户耗费14.5个小时,一直到15:30才执行完,这就导致redis的key需要到第二天3:30才会过期,但JOB在1点就执行了,所以JOB执行的时候key没过期,造成redis重复放了数据,从12.9-12.13,每天执行1次,一共执行了4次,所以redis中有1000w的openId
5、处理
暂停同步微信粉丝JOB执行,影响:新授权的公众号,粉丝不会自动同步到F6系统
6、后续
1、有海量微信粉丝的客户,我们需要何时,采用何种发放同步数据?
2、是否有必要每天同步全量的微信粉丝?
3、同步微信粉丝JOB的效率如何提升?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!