范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

我又和redis超时杠上了

  背景
  经过上次redis超时排查,并联系云服务商解决之后,redis超时的现象好了一阵子,但是最近又有超时现象报出,但与上次不同的是,这次超时的现象发生在业务高峰期,在简单看过服务器的各项指标以后,发现只有cpu的使用率在高峰期略高,我们是8核cpu,高峰期能达到90%的使用率,其余指标都相对正常。
  但究竟是不是cpu占比高的问题导致redis超时的呢?还有待商榷,因为cpu调度程序慢本质上也是个概率性事件。 解决思路略带侥幸的联系云服务商
  有了上次的经验过后,我也是联系了云服务商那边也排查下是否还存在上次超时的原因,但其实还是有直觉,这次的原因和上次超时是不一样的(备注:上次超时是由于云服务商那边对集群的流量隔离做的不够好,导致其他企业机器流量影响到了我们的机器,且发生在业务低峰期),这次发生在业务高峰期。
  果然,云服务商得出的结论也是之前出问题的机器以及迁移走了,并且他们也和我同时展开排查。 抓包分析
  在ecs服务器上进行抓包,当出现超时时,关闭tcpdump进行分析。 tcpdump 漏包了?
  在dump下抓包文件后,经过wireshark分析,并没有发现丢包信息,想着应该是tcpdump漏包了。 tcpdump 出现漏包的情况[webserver@hw-sg1-test-0001 ~]$ sudo tcpdump -i eth0 tcp  port 6379   -w p.cap -W 2 -G 3600 -C 2000 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
  可以看到默认的抓包大小262144 bytes,在业务高峰期如果每个包最大长度都在这个值,很可能就导致缓冲区满了,而之前一次抓包分析为什么就没有这个问题呢,因为那是在业务低峰期,tcpdump丢包概率比较小。 sudo tcpdump -i eth0 tcp  port 6379   -w p5.cap -W 2 -G 3600 -C 2000 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C147940 packets captured 468554 packets received by filter 318544 packets dropped by kernel
  packets dropped by kernel 说明tcpdump丢弃了某些包,因为tcpdump在处理包时,是先将包放到一个缓冲区进行分析,当缓冲区满的时候会直接进行丢弃,这样导致我在用wireshark分析包的时候,就会出现有些包找不到的情况。 在缩小抓取的包大小和去掉域名解析后,不再漏包了。[webserver@hw-sg1-backend-0003 ~]$ sudo tcpdump -i eth0 tcp  port 6379   -w p5.cap -W 2 -G 3600 -C 2000 -n -s 1520 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1520 bytes ^C21334 packets captured 21454 packets received by filter 0 packets dropped by kernel 抓包分析超时情况
  redis客户端超时时间设置的200ms,可以看到2894687号包是redis服务器发送给客户端的包,然后2897927是客户端发送给redis服务端的rst,正常情况客户端收到redis服务端的psh信号的包应该会回复一个ack的,但是客户端却在200ms以后回复了一个rst,说明了什么问题?
  我们的客户端是golang写的,可以想到的情况是,客户端程序在读取包过程协程会有切换上下文操作,当客户端发现有可读包时并切回go协程的时候,会首先判断当前读操作是否超时,如果超时,则直接调用close方法关闭连接了。
  那么close方法是发送rst信号吗,正常不应该是fin信号?
  非也,close方法如果关闭的时候,连接读缓冲区的数据还有未被应用程序读取的话,那么此时close方法的调用会发送rst信号。
  可见,问题的确是出在客户端了,并且看上去像是客户端来不及读取服务端的消息。看到这里,其实我心里已经百分之八九十确定是cpu的使用率达到瓶颈了。
  云服务商来信了
  在分析到上一个步骤的时候,云服务商告诉我,他们知道原因了,是ecs服务的磁盘吞吐量达到瞬时上线,说故障点是和超时的故障点是吻合的。
  我知道这个后,第一时间的疑惑是,为啥磁盘吞吐会影响到网络传输,云服务商给的解释是磁盘吞吐达到瞬时上线后,对服务整体是有影响的,我又看了下ecs的监控图标,发现监控图标显示的磁盘吞吐远远没有云服务商提到的那么多。
  尽管云服务商坚持是磁盘iops达到了上限,但还是不能说服我 磁盘的iops瞬时上限会那么大影响到网络传输。
  于是有了接下来第二天的抓包分析。 第二天的抓包分析
  基于对昨天的分析,我怀疑到了cpu头上,如果cpu切换进程缓慢,协程调度缓慢,那么的确是有可能发生超时的。由于目前的监控缺少对协程调度延迟的监控,所以决定加上这一指标。
  golang1.17后 runtime包提供了协程调度延迟的直方图统计信息,而go prometheus的client其实以已经支持将这个信息转换为prometheus内置的指标类型,metric名称是go_sched_latencies_seconds,而我们之前试用prometheus的client包注册的collector 是兼容到go1.16以及之前的版本,所以没有当改用到最新的collector后,client如期返回了go_sched_latencies_seconds 直方图信息。
  将这个信息展示在grafana里。于是有了第二天协程调度延迟的信息。p999在业务高峰期间达到了100ms,也是与超时时间吻合的。协程调度延迟指的是协程变为可运行状态后到被真正执行这段时间等待被调度的时间,这里都高达100ms了,如果加上cpu线程,进程切换上下文时间,很有可能是超过了redis client端设置的200ms超时上限。
  为了排除掉是磁盘原因引起的超时。
  我在7点又进行了抓包分析,发现和昨天抓到包的情况是一致的,客户端最后来不及回应服务端的包最后发送rst了。
  然后看了下此时机器磁盘吞吐情况,发现图中箭头处也处于高峰期,但是磁盘吞吐量并未上去,而升上去的点正是抓包带来的,怀疑是抓包写入文件导致磁盘吞吐量涨上去了。于是又问了服务商要磁盘达到瞬时峰值的日志。
  发现报瞬时峰值的日志也和抓包时间吻合,所以已经确认磁盘吞吐达到上限是抓包导致的,网络超时是和磁盘吞吐无关的,反而应该是cpu使用率达到上限了,虽然没有100%,也是8核,但毕竟cpu某个核达到上限是概率性事件,而对于redis这种时延敏感性应用,一但发生,那么超时是有可能的。 完美解决
  于是,在业务低峰期将我们三台ecs服务进行了cpu配置提升,提升后效果很明显,超时在高峰期不见了,协程调度延迟也大大减少。
  总结
  1,对于抓包分析,还是疏忽了,加上包限制大小,能很好的防止tcpdump抓包时丢包的情况。
  2,对于任何第三方的说法要有自己的判断力,像这次如果中途去将磁盘扩容显然是不能解决问题的。
  3,性能问题分析真是像一个侦探破案的过程,不断列出证据,不断排除掉干扰因素,不断论证的过程也是性能分析的魅力所在吧,就像这次看到cpu的确比较高了,但是究竟是不是客户端问题呢?我又抓包论证了的确是客户端问题,那究竟是不是协程调度问题呢?我又列出协程调度延迟。

8款5500毫安起步手机盘点!红魔8Pro骁龙8Gen2重228g6。8英寸120Hz无孔全面屏支持1440HzPWM高频调光DC调光76。35x163。98x8。9毫米LPDDR5X内存UFS4。0闪存红芯R小米之家购买手机,和网购的体验截然不同,附加了很多服务前天带着我的父亲去永旺梦乐城买了一部小米手机,说实话我已经好多年没在实体店买手机了,因为网络非常发达,足不出户就能买到手机。有时候我也会嘲笑那些实体店买手机的顾客,实体店猫腻这么多推荐高性价比手机千元机也能拥有不错的性能,好看便宜又好用希望各位在阅读前能动动发财的小手帮忙点点上面关注二字,方便给大家分享性价比手机,感谢支持。如果要选手机给自己的父母长辈,而且性能方面也不用过多的要求,中等水平够用就行的话,可以考虑榜单最新手机好评Top10有你吗?榜首意外小米13Pro排第3近日,安兔兔根据后台统计到的数据公布了2023年1月国内Android手机好评榜好评榜。注数据来源安兔兔评测,数据收集时间是2023年1月1日至1月31日,仅限国内市场统计使用安兔2023年最火爆的4款手机你买了哪款?您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。都2023年2月份了,有些手机注定会成为前半年烂大街的手机,你买了哪款?第一款苹果iPho交广会客厅寒风凛冽,他们为火车安尾巴一列列满载货物的火车,在繁忙的铁道线上飞驰而过,大家不知道的是,如此威武的钢铁巨龙,其实都是有尾巴的,正是由于这小小的尾巴,满载货物的列车才能安全驶向全国各地。1月上旬,尽管天气寒过年风雪回家路1983年冬,我们几个同年入伍的战友早早约好一起回家过年。腊月二十八,我和战友吴学林一同踏上回家路。即便从始发地宁波站上车,也只买到一张坐票一张站票,就这还是托铁路军代处战友帮忙才寒风打卡南阳古镇,康熙下榻处,关公饮马泉,古运河世界文化遗产看预报说第二天要急速降温到零下810度,便于大年初二驾车赶往南阳古镇。南阳古镇位于山东济宁市微山县,在微山湖最北侧,毗邻京杭大运河。南阳古镇是山东版的千岛湖,由1个主岛和117个小红梅开了!约起!一起来鼓楼寻香沐浴着暖暖的冬日阳光福山郊野公园显露出早春的生机与活力林间一树树红梅开得正艳路旁一簇簇炮仗花迎来送往为前来踏春的人们增添一份惊喜在福山郊野公园祈福台附近一片红梅吸引了不少游客驻足我陕西4线路入选瑞雪红梅欢喜过年全国乡村旅游精品线路万象更新日,新桃换旧符。近日,文化和旅游部推出乡村四时好风光瑞雪红梅欢喜过年全国乡村旅游精品线路128条。线路突出冬季和春节时令特点,以民俗文化节庆活动赏冰玩雪乡土美食合家出游等为瑞雪红梅欢喜过年游山水逛小镇,爱上了这条乡恋休闲之旅文化和旅游部推出乡村四时好风光瑞雪红梅欢喜过年全国乡村旅游精品线路,今天带您走进山水乡恋休闲之旅。山水乡恋休闲之旅线路简介踏上这条线路领略七彩艺术小镇的文化气息,沿途有恋乡太行水镇
白桦想,自己终于获得了想要的平静落在屋顶上的乌鸦被一声巨响吓的四处飞散,残阳染红了西边的云朵,小孩子们幸福的仰望有人说和平鸽就要飞来了。白桦生活在一个小乡村,春天,五颜六色的花开得好美好美,那时她就有一个梦想永远街机游戏中最离谱的必杀技,老奶奶强吻别人之后变妙龄少女?在街机厅里,格斗和动作游戏一直都是顶流,这类游戏吸引玩家的不仅仅是拳拳到肉的快感,还有释放必杀技所带来的视觉震撼!如果能用必杀技终结对手,不仅仅当事人会产生一种淡淡的自豪感,就连身上海天空突现不明发光体,移动速度飞快,会是外星发出的信号吗?上海天空出现不明发光体前段时间,据直播海南报道,位于上海陆家嘴上空竟然出现不明飞行物。从现场传回的视频中我们可以看到,当天晚上正好是上海陆家嘴最为热闹的时候,四周灯火通明,与迷蒙幽木兰溪上的桥历史和今天在这里聚合,梦想与现实在这里交融木兰溪上的桥历史和今天在这里聚合,梦想与现实在这里交融仙游网红桥新金凤桥之所以突然想写写木兰溪上的桥,是因为这段时间,我大部分时间就花在县城里,早晨我在木兰溪畔晨练跑步,晚上我在木昙花一现傅园慧曾热度比肩林丹,张继科,现人气不如路人58秒95?我以为是59秒,我有这么快,我很满意。没有保留,我已经用了洪荒之力了。这是2016年里约奥运会女子100米仰泳半决赛傅园慧获得了小组第三的成绩成功晋级决赛之后,接受采访成小保和马小虎关于保密那些事近日,火箭军某部组织策划设计编写了筑保密屏障护钢铁长城漫画宣传册。该漫画通过两个虚拟人物成小保和马小虎示范示例,以漫画形式进行解读宣传,引导大家科学识密正确用密依规管密,进一步做到马刺裁掉普里莫令NBA震惊,Woj前所未见马刺宣布裁掉约书亚普里莫。此举让外界十分震惊,因为马刺在2021年首轮第12顺位选中当时年仅18岁的普里莫。后者仅仅打完一个赛季就被裁员。Woj发推写道普里莫是2021届最年轻的球奋斗第二集感悟1。大大方方的。2。荷尔蒙,人之本能。3。勿想入非非,做行动的主人。4。君子爱财,取之有道家有千金,行止由心。5。财富自由。6。演戏全靠彩排。7。年轻人要用有限的时间做无限的事,为不改就禁止上架?苹果CEO也没想到,制裁来得这么快不改就禁止上架?苹果CEO也没想到,制裁来得这么快!2019年,华为的智能手机出货量从2018年的26。5上升到38。5,远远超过了排行第二的oppo,而苹果只排到了第五名。可无奈微信打开这些设置,别人休想再盗走你的钱现在使用移动支付的人是越来越多了,特别是微信支付使用的频率也别高,那么你知道如何设置才能保障支付安全吗?接下来就带大家一起看看,通过下面这些设置,保证别人永远别想盗走你1分钱。一常先照寺前无日光杭州萧山的湘湖边上,有座石岩山,是当地海拔最高的山。南宋绍兴年间,有人在石岩山顶建了一座宏大的寺庙,取名先照寺。原来,每天这个寺庙是享受第一缕阳光的地方,是最先承受天地刚阳之气甘露