共计 638 个字符,预计需要花费 2 分钟才能阅读完成。
获取连贯失败 Could not get a resource from the pool
场景形容
在 C 端我的项目上线后遇到高并发场景,后盾继续报警,获取不到 redis 连贯,此时单机 redis 最大连接数为 10,经排查,发现该业务场景的动态资源均寄存于 redis 中,每个用户申请都会去 redis 获取数据,导致高并发场景下,获取连贯的速度大于开释连贯的速度,导致了此异样
解决方案
转移局部动态资源至本地缓存中,每个实例保留一份,缩小 redis 压力
后续复盘
在通过第一轮优化后,发现扔会呈现此状况,于是将单实例最大连接数调整至 50,零碎不再报错,在高并发场景下须要慎重考虑分布式缓存与本地缓存的利用场景,不可一味应用分布式缓存,以及须要思考 redis 适宜的连接数,保障性能失常运行
高并发场景下审慎应用分布式锁
场景形容
在上述场景下,线程池打满,服务器报错 Thread pool is EXHAUSTED…Pool Size:200,经排查发现在队列工作中,每一个工作自选获取分布式锁,锁开释速度小于获取锁的速度,导致大量申请累积在线程池中,造成异样
解决方案
讲队列中锁勾销掉,依据业务需要决定应用偏心锁或非偏心锁模式,不须要额定分布式锁
缓存击穿
场景形容
上述场景中,某一个业务须要依据 userId 查问数据,并放入缓存中,下次进入时将命中缓存,高并发时,因为代码疏漏没有将第一次的后果放入缓存中,导致大量申请同时进入数据库,导致数据库连贯超时
解决方案
调整代码,将数据写入缓存,并设置正当的过期工夫,避免缓存雪崩 & 击穿
正文完