记录一个生产问题
项目中有用到redisson做分布式锁,在项目发版初期,并没有发生什么问题,到了一个小时后,项目开始频繁的报解析异常,跟进日志易发现有很多RedissonConnectionClosedException,此时在想,为什么Redisson的请求会被redis拒绝掉,当时由于项目紧急给的发版时间有限,就匆匆还原了版本。
第二天复盘,由于报错是按照时间递增的,首先就想到了是不是配置的连接池太小导致的
spring.redis.jedis.pool.max-active=1000
spring.redis.jedis.pool.max-wait=6000
spring.redis.jedis.pool.max-idle=20
spring.redis.jedis.pool.min-idle=5
因为除了分布式锁用到了redis,还有一个做kafka消息版本控制的地方也用到了redis,并且流量很大,此时就模拟了一个报错的流程:
刚发版时由于未把连接池占满,并没有报错,后来由于消息越积越多,造成了连接池不够用,从而新需求就被拒之门外,造成了RedissonConnectionClosedException。
等下个版本做消息校验不放在redis里做,放在mongo里做再试试