org.redisson.client.RedisResponseTimeoutException: Redis server response timeout (3000 ms) occured after 3 retry attempts. Command: (HEXISTS), params: [com.dinsmooth.storehbase.schedule:entryTaskDelay, 1f15dcac-22b6-4865-92a5-a6452e6ae5c3:154], channel: [id: 0x4d120152, L:/10.255.2.30:52607 - R:172.16.0.211/172.16.0.211:6379]
at org.redisson.command.RedisExecutor$3.run(RedisExecutor.java:362)
at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:682)
at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:757)
at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:485)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
异常如图所示,大致意思就是 redis在3000ms里面连接终断。
错误原因: 客户端长时间未使用,服务端会断开。
线下开发环境未发生。只是线上多人使用会出现如上错误。
解决思路:
1.查看网络 发现 网卡使用过高,初步判断是java应用里面有大量的查询。使用redis,因为线上人数多,redis不能及时处理数据。检查对应的方法注释掉 在启动项目。
2.采用 htop 或者top 查看java应用占用网卡 网速很高。
3.检查 服务器日志,发现redis3000毫秒被拒。
4.mysql配置 给SQL执行 显示时间,找到耗时最久的SQL语句优化代码。