bug:cpp_redis写数据达到一定量的时候出现断连,然后崩溃

现象

做期权夜盘时,对cpp_redis管理类做了修改,程序运行不到1小时就出现断连崩溃,报错如下:
在这里插入图片描述

过程
  • 各种修改尝试,始终找不到原因,没有找到问题关键
    开始以为是将redis管理类改为了单例导致的问题,修改之后仍然没有效果
    百度相关问题,发现用cpp_redis的人实在太少,没有可以参考的用例
    查看redis的日志,都是正常的刷新数据的日志,没有和连接相关的内容
    去看cpp_redis源码中example的实例,发现都是非常简单的用法,和自己的使用相差不大
    这个问题从库这方面找问题真的无从插手。于是转换角度,从tcp连接上找问题

  • 既然报了tcp_client is disconnected错误,说明和redis的连接出现了某些问题。程序运行时,执行如下命令 netstat -anp | grep 6379 如下图所示。这个命令的几列数据意义如下 :

  • 在这里插入图片描述

  1. proto:网络传输协议
  2. Recv-Q :数据已经在本地接收缓冲区,但是还没有recv()
    The count of bytes not copied by the user program connected to this socket.
    单位是字节,是表示程序总共还有多少字节的数据没有从内核空间的套接字缓存拷贝到用户空间
  3. Send-Q:对方没有收到的数据或者说没有Ack的,还在本地缓冲区
  4. Local Address :本地地址
  5. Foreign Address:外部地址
    Recv-Q和Send-Q正常情况下都为0,但从下图看到,Recv-Q和Send-Q都在不断的变大,显然是有问题的。确定问题是出在redis相关代码上。
    在这里插入图片描述
修改

通过review代码发现,在get函数取值时的回调函数中发生了崩溃,如下图函数以及修改

在这里插入图片描述

在这里插入图片描述

修改后的效果

发送队列和接收队列都为0,经验证,崩溃解决
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值