记一次Redis的异常分析

最近线上环境偶尔在零点过后的时候就会报Redis的异常,出现好几种错误,并且持续时间在1-3分钟之间,并不固定,报的错误也有3种,表现各不相同,很是诡异。

(1)错误一

redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
        at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:201)
        at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
        at redis.clients.jedis.Protocol.process(Protocol.java:132)
        at redis.clients.jedis.Protocol.read(Protocol.java:196)
        at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:288)
        at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:224)
        at redis.clients.jedis.Jedis.hgetAll(Jedis.java:780)
(2)错误二

2015-12-12 00:01:39,825 ERROR [com.lazyaudio.yyting.cache.protobuf.ProtobufFactory:224] [KryoError]errorMsg=Protocol message end-group tag did not match expected tag.
com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
        at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:73)
        at com.google.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:124)
        at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:163)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:716)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:238)
        at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:153)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:709)

(3)错误三

2015-12-12 00:01:39,824 ERROR [com.lazyaudio.yyting.cache.protobuf.ProtobufFactory:224] [KryoError]errorMsg=Protocol message tag had invalid wire type.
com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
        at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:78)
        at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
        at com.google.protobuf.GeneratedMessage$Builder.parseUnknownField(GeneratedMessage.java:438)
 


近一年来我们线上环境使用Redis效果都好得出奇了,极少有超时的情况发生,这次已经持续1个多星期,说不定哪天零点以后,就会出现Redis的上述错误,故障时间也不确定(通常在1-3分钟以内),其它时间段就一切良好,我从业务上到处找可能的原因,快2周过去了,一点眉目没有,google/baidu都没有找到有价值的参考资料。

不经意之间,我想起来比较下该机器Load的变化情况,一看下来就什么都知道了,不明原因Load从0点开始就会升高,知道问题了就好办了,就是等着看什么东东导致Load高就得了,事情就这么简单的解决了!


一直没有朝redis本身去找问题,太信任它了,最后的结果证明我是错的!

我们的Redis采用sentinel 5个节点,Redis 2 个节点的方式部署,其中主节点采用缓存模式,都不写磁盘纯粹作为一个缓存,备节点则写AOF和RDB,所以一直没有朝Redis本身去追问题。事实上最后看来是由于切换过Redis的主备,结果变成主在写AOF和RDB,备作为缓存在运行了,以至于在主库上的磁盘IO压力比较高的时候,导致Redis每秒一次的写磁盘超时,影响了线上应用服务器去读取和写入数据,这就有超时Timeout发生了。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值