Redis Socket间歇性连接异常(JedisConnectionException)排查求助
Redis间歇性连接异常(发生概率约1%)
异常现象
系统间歇性抛出JedisConnectionException,错误信息为Unknown reply: 2,发生概率约百分之一。
异常栈详情
redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply: 2 redis.clients.jedis.Protocol.process(Protocol.java:71) redis.clients.jedis.Protocol.read(Protocol.java:122) redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:189) redis.clients.jedis.BinaryJedis.zrange(BinaryJedis.java:1465) com.moglix.ecom.es.api.service.impl.APICacheManager.deleteBrandFromCache(APICacheManager.java:775) com.moglix.ecom.es.api.service.impl.APICacheManager.removeBrandsFromCacheByName(APICacheManager.java:766) com.moglix.ecom.es.api.service.impl.APICacheManager$$FastClassBySpringCGLIB$$948a485d.invoke(<generated>) org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:652) com.moglix.ecom.es.api.service.impl.APICacheManager$$EnhancerBySpringCGLIB$$1b2c303d.removeBrandsFromCacheByName(<generated>) com.moglix.ecom.es.api.cache.APICacheController.clearBrandsFromCacheByName(APICacheController.java:170) sun.reflect.GeneratedMethodAccessor5700.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service(HttpServlet.java:624) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
排查方向
- 检查Redis服务端是否存在连接超时、响应异常,比如网络波动导致数据包丢失或乱序,Jedis解析响应时无法识别错误的起始字节(此处为
2)。 - 验证Jedis客户端与Redis服务端版本兼容性,版本不匹配可能引发协议解析异常。
- 核查连接池配置(如
maxTotal、maxIdle)是否合理,是否存在连接泄漏或复用失效连接的情况。 - 排查网络层问题,比如防火墙、负载均衡设备是否会偶尔截断或篡改Redis通信数据包。
- 开启Redis慢查询日志与客户端连接日志,查看异常发生时服务端的对应错误记录。
内容的提问来源于stack exchange,提问作者Abubakar
相关产品推荐
相关产品推荐

