真实项目中出现的问题以及解决方案

5 篇文章 0 订阅
2 篇文章 0 订阅

真实项目中出现的问题以及解决方案,

在博主开发的这段时间,近期做了一个视频类项目,其中出现了一些因为用户量并发。导致了一些问题。
在这里写出来,如果有遇到这样情况的朋友可以借鉴一下。

1、在视频类项目中,早期用户量不大的时候,我们使用的是sql直连数据库来查询用户看的视频。
但是在用户量上来的时候,用户不停的刷视频,导致接口不停的请求数据库。这时候数据库连接数被沾满,反应效率极其的慢,最后因为获取不到连接数导致数据库崩溃,项目崩溃。
2、解决数据库崩溃问题,第一反应进行对数据库查询索引的优化,使用explain和show profile来分析SQL语句实现优化SQL语句效果不明显。依旧还是会项目崩溃。
3、因为第一条出现的问题,并且第二条我们并没有解决,我们使用redis进行将视频数据存储,用户请求redis获取视频数据,会变得比较流畅。我们同时也使用redis的消费者和观察者模式,进行对消息队列的控制,进行用户埋点日志操作的保存,导致了因为redis承载量不够,用户埋点过多,用户刷新视频过多,导致redis崩溃,缓存击穿。
4、redis崩溃后,我们将redis连接方式进行更改从redisTemplte 修改成 jedis,不做线程控制,但是效果不明显。后来我们把redis中的埋点用户操作从redis剥离,从而使用rabbitMQ,进行对数据的埋点处理。减轻redis压力。
5、在redis的压力减轻后,又出现了OOM异常,内存溢出。原因:在同一个埋点不停的new对象,并且使用beanUtil 进行对象的赋值,从而导致的内存溢出。
6,解决内存溢出的方式:
第一版:加大内存,调jvm内存大小,增加到16G内存,但是情况好转,但是过了一段时间还是会出现OOM内存溢出的异常,可以短期的迅速解决线上崩溃问题,快速恢复线上功能。
第二版:使用JVM分析工具,得到当前类占用了特别多的堆内存空间,以我们这边将代码优化,使用到的对象使用单例模式(双重锁模式),进行创建,重复使用当前对象。
第三版:使用JVM分析工具,得到当前类占用了特别多的堆内存空间,并且_B的对象也占用了特别多。
所以我们这边将代码优化,使用mybatis进行将表名动态传入,放弃jpa的生成对象,保证不会持续的创建对象。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值