您现在的位置: 小通草 > 小通草用法用量 > 正文 > 正文

Redis小功能大用处totalne

  • 来源:本站原创
  • 时间:2021/1/29 20:18:45
北京白癜风治疗医院 https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC%E4%B8%AD%E7%A7%91%E7%99%BD%E7%99%9C%E9%A3%8E%E5%8C%BB%E9%99%A2/9728824?fr=aladdin

由于诸多原因,现在已经很少能长篇大论介绍Redis的相关技术,但日常工作以及脑子中经常想整理和总结一些Redis的点点滴滴,既能帮助自己记录问题,又能帮助他人减少碰到类似问题,于是有个想法,准备写一个小的系列:Redis小功能大用处。

本文将介绍Redis3后一个新的统计项total_net_output_bytes。

一、问题

之前有朋友问我,Redis统计的网络输出流量总值total_net_output_bytes和瞬时值instantaneous_output_kbps比实际机器统计的要高。(Redis版本3.2.3)

经试验证明,确实如此:一个机器的输出网络流量远远小于几个Redis实例的。

1.单机Redis实例网络输出流量统计:2.单机整机网络输出流量统计:

一般碰到这类问题,习惯性的在源码里找下,看看到底是如何计算的。

二、网络输出流量计算

代码里搜server.stat_net_output_bytes,找到如下这个代码

1.networking.c的writeToClient函数:

将输出缓冲区数据通过socket发送给客户端,源码比较长:

/*WritedatainoutputbufferstoclientintwriteToClient(intfd,client*c,inthandler_installed){ssize_tnwritten=0,totwritten=0;size_tobjlen;size_tobjmem;robj*o;while(clientHasPendingReplies(c)){if(c-bufpos0){nwritten=write(fd,c-buf+c-sentlen,c-bufpos-c-sentlen);if(nwritten=0)break;c-sentlen+=nwritten;totwritten+=nwritten;if((int)c-sentlen==c-bufpos){c-bufpos=0;c-sentlen=0;}}else{o=listNodeValue(listFirst(c-reply));objlen=sdslen(o-ptr);objmem=getStringObjectSdsUsedMemory(o);if(objlen==0){listDelNode(c-reply,listFirst(c-reply));c-reply_bytes-=objmem;continue;}nwritten=write(fd,((char*)o-ptr)+c-sentlen,objlen-c-sentlen);if(nwritten=0)break;c-sentlen+=nwritten;totwritten+=nwritten;if(c-sentlen==objlen){listDelNode(c-reply,listFirst(c-reply));c-sentlen=0;c-reply_bytes-=objmem;}}server.stat_net_output_bytes+=totwritten;if(totwrittenNET_MAX_WRITES_PER_EVENT(server.maxmemory==0

zmalloc_used_memory()server.maxmemory))break;}.............忽略忽略忽略..............2.基础知识:

Redis为每个客户端配置了输入缓冲区和输出缓冲区,用户暂存发送的命令和返回的结果,其中输出缓冲区分为:普通客户端缓冲区、复制客户端缓冲区、pubsub客户端缓冲区,并且输出缓冲区内部分为bufpos用于缓存一些小结果集,另外设置一个队列缓存大结果:

(1)小结果集:

typedefstructredisClient{//缓存小结果集charbuf[REDIS_REPLY_CHUNK_BYTES]intbufpos}

(2)小结果集:

typedefstructredisClient{//缓存队列list*reply}三、Redis作者的低级失误:

server.stat_net_output_bytes记录从输出缓冲区累加的字节数,但3.2.3之前似乎放错了位置,导致过大。

可以想到这个bug肯定已经被提过并修复了(


本文编辑:佚名
转载请注明出地址  http://www.xiaotongcaoa.com/yfyl/9380.html

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 热点文章

    • 没有任何图片文章
    • 没有热点文章
    推荐文章

    • 没有任何图片文章
    • 没有推荐文章

    Copyright © 2012-2020 小通草版权所有



    现在时间: