当前位置: 首页 > news >正文

汕头市做网站店面设计师招聘

汕头市做网站,店面设计师招聘,淮安网站建设报价,12306的网站建设​​​​​​​​​​​​​​​​​​​​​​​​​​​​摘要#xff1a;一次由fork引发的时延抖动问题。背景介绍华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构#xff0c;兼容Redis生态的云原生NoSQL数据库#xff1b;它依靠共享存储池实现了强一致…​​​​​​​​​​​​​​​​​​​​​​​​​​​​摘要一次由fork引发的时延抖动问题。背景介绍华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构兼容Redis生态的云原生NoSQL数据库它依靠共享存储池实现了强一致支持持久化落盘存储保证数据的安全可靠。其核心特点是存算分离、强一致、低成本、超大容量。GaussDB(forRedis)服务团队在支撑某客户业务上云的过程中发现一次由fork引发的时延抖动问题本着对客户负责任的态度我们详细探究了fork这个系统调用的性能影响并且在最新的GaussDB(for Redis)版本已解决了这个抖动问题清零了内部的fork使用与原生Redis相比彻底解决了fork的性能隐患。问题焦点1)华为云GaussDB(for Redis) 服务在某客户上云线调测过程中发现系统上量后规律性的出现每5分钟1次的时延抖动问题。2)华为云GaussDB(for Redis)团队经过攻关最终确认抖动原因是fork导致并解决了这个问题。而fork是开源Redis的一个重要依赖希望通过本文的分享能够帮助大家在使用开源Redis的时候充分认识fork的影响从而选择更优的方案。问题现象某客户业务接入GaussDB(for Redis)压测发现每5分钟系统出现一次规律性的时延抖动1)正常情况消息时延在1-3ms抖动时刻时延达到300ms左右。2)通常是压测一段时间后开始出现抖动抖动一旦出现后就非常规律的保持在每5分钟1次每次抖动的持续时长在10ms以内。下图是从系统慢日志中捕获到的发生抖动的消息样例(对敏感信息进行了遮掩)问题分析1. 排查抖动源1)由于故障的时间分布非常规律首先排除定时任务的影响主要包括l agent和管控对接的周期性统计信息上报任务l 内核执行引擎(Redis协议解析)和存储引擎(rocksdb)的周期性操作(包括rocskdb统计wal清理等)屏蔽上述2类定时任务后抖动依然存在。2)排除法未果后决定回到正向定位的路上来。通过对数据访问路径增加分段耗时统计最终发现抖动时刻内存操作(包括allocate、memcpy等)的耗时显著变长基本上长出来的时延都是阻塞在了内存操作上。(截图为相关日志单位是微秒)3)既然定位到是系统级操作的抖动那么下一步的思路就是捕获抖动时刻系统是否有异常。我们采取的方法是通过脚本定时抓取top信息分析系统变化。运气比较好脚本部署后一下就抓到了一个关键信息每次在抖动的时刻系统中会出现一个frm-timer进程该进程为GaussDB(for Redis)进程的子进程且为瞬时进程持续1-2s后退出。4)为了确认该进程的影响我们又抓取了perf信息发现在该进程出现时刻Kmalloc memset_ssememcopy_sse等内核系统调用增多。从上述信息推断frm-timer进程应该是被fork出来的抖动源基本可锁定在fork frm-timer这个动作上。2.确定引发抖动的代码1)分析frm-timer的来历是下一步的关键。因为这个标识符不在我们的代码中所以就需要拉通给我们提供类库的兄弟部门联合分析了。经过大家联合排查确认frm-timer是日志库liblog中的一个定时器处理线程。如果这个线程fork了一个匿名的子进程就会复用父进程的线程名表现为Redis进程创建出1个名为frm-timer的子进程的现象。2)由于frm-timer负责处理liblog中所有模块的定时器任务究竟是哪个模块触发了上述fork这里我们采取了一个比较巧妙的方法我们在定时器处理逻辑中增加了一段代码如果处理耗时超过30ms则调用std:: abort()退出以生成core栈。3)通过分析core栈并结合代码排查最终确认引发抖动的代码如下上述代码是用来周期性归档日志的它每5分钟会执行1次 system系统调用来运行相关脚本完成归档日志的操作。而Linux system系统调用的源码如下实际上是一个先fork子进程再调用execl的过程。4)分析至此我们还需要回答最后一个问题究竟是fork导致的抖动还是脚本内容导致的抖动为此我们设计了一组测试用例l 用例1将脚本内容改为最简单的echo操作l 用例2在Redis进程里模拟1个类似frm-timer的线程通过命令触发该线程执行fork操作l 用例3在Redis进程里模拟1个类似frm-timer的线程通过命令触发该线程执行先fork再excel的操作l 用例4在Redis进程里模拟1个类似frm-timer的线程通过命令触发该线程执行system的操作l 用例5在Redis进程里模拟1个类似frm-timer的线程通过命令触发该线程执行先vfork再excel的操作最终的验证结果l 用例1有抖动。l 用例2有抖动。l 用例3有抖动。l 用例4有抖动。l 用例5无抖动。用例1结果表明抖动和脚本内容无关用例2、3、4的结果表明调用system引发抖动的根因是因为其中执行了fork操作用例5的结果进一步佐证了抖动的根因就是因为fork操作。最终的故障原因示意图如下3. 进一步探究fork的影响1)众所周知fork是Linux(严格说是POSIX接口)创建子进程的系统调用历史上看主流观点大多对其赞誉有加但近年间随着技术演进也陆续出现了反对的声音有人认为fork是上个时代遗留的产物在现代操作系统中已经过时有很多害处。激进的观点甚至认为它应该被彻底弃用。(参见附录1,2)2)fork当前被诟病的主要问题之一是它的性能。大家对fork通常的理解是其采用copy-on-wirte写时复制策略因此对其的性能影响不甚敏感。但实际上虽然fork时可共享的数据内容不需要复制但其相关的内核数据结构(包括页目录、页表、vm_area_struc等)的复制开销也是不容忽视的。附录1、2中的文章对fork开销有详细介绍我们这回遇到的问题也是一个鲜活的案例对于Redis这样的时延敏感型应用1次fork就可能导致消息时延出现100倍的抖动这对于应用来说无疑是不可接受的。4.原生Redis的fork问题4.1 原生Redis同样被fork问题困扰(参见附录345)具体包括如下场景1)数据备份备份时需要生成RDB文件因此Redis需要触发一次fork。2)主从同步全量复制场景(包括初次复制或其他堆积严重的情况)主节点需要产生RDB文件来加速同步同样需要触发fork。3)AOF重写当AOF文件较大需要合并重写时也会产生一次fork。4.2 上述fork问题对原生Redis的影响如下1)业务抖动原生Redis采用单线程架构如果在电商大促、热点事件等业务高峰时发生上述fork会导致Redis阻塞进而对业务造成雪崩的影响。2)内存利用率只有50%Fork时子进程需要拷贝父进程的内存空间虽然是COW但也要预留足够空间以防不测因此内存利用率只有50%也使得成本高了一倍。3)容量规模影响为减小fork的影响生产环境上原生Redis单个进程的最大内存量通常控制在5G以内导致原生Redis实例的容量大大受限无法支撑海量数据。解决方法1.修改日志库liblog中的周期性归档逻辑不再fork子进程。2.系统排查并整改GaussDB(for Redis)代码(包括使用的类库代码)中的fork调用。3.最终排查结果实际只有本次的这个问题点涉及fork。当前修改后即可确保GaussDB(for Redis)的时延保持稳定不再受fork性能影响。注GaussDB(for Redis)由华为云基于存算分离架构自主开发因此不存在原生Redis的fork调用的场景。总结本文通过分析GaussDB(for Redis)的一次由fork引发的时延抖动问题探究了fork这个系统调用的性能影响。最新的GaussDB(for Redis)版本已解决了这个抖动问题并清零了内部的fork使用与原生Redis相比彻底解决了fork的性能隐患。希望通过这个问题的分析能够带给大家一些启发方便大家更好的选型。附1.[是时候淘汰对操作系统的 fork() 调用了]https://www.infoq.cn/article/BYGiWI-fxHTNvSohEUNW2.[Linux fork那些隐藏的开销]https://www.mdeditor.tw/pl/29L03.[Redis官方文档]https://redis.io/topics/latency4.[Redis的一些坑]https://www.jianshu.com/p/03df6fd516eb5.[Redis 常见问题之-fork操作]https://blog.csdn.net/longgeqiaojie304/article/details/894072146.[GaussDB(for Redis)官网链接]https://www.huaweicloud.com/product/gaussdbforredis.html本文作者华为云数据库GaussDB(for Redis)团队点击关注第一时间了解华为云新鲜技术~
http://www.yutouwan.com/news/66712/

相关文章:

  • 深圳做响应式网站制作网站制作案例图片
  • TP5企业网站开发教程百度云wordpress 支付宝
  • wordpress底部导航插件网站改版影响seo吗
  • 自己做网站的优势虫虫 wordpress 群发
  • 大气金融投资企业网站模板最容易做的网站类型
  • 网站刷单账务处理怎么做杭州专业网站排名优化
  • 多城市网站建设网站制作公司排名
  • 网站建设宣传ppt模板公司网站的好处
  • 做ppt网站有哪些内容吗wordpress怎么把图片存七牛
  • 环境文化建设方案网站地和网站建设
  • 做破解网站合法互联网络
  • 建设部网站查询造价师证件网页的源代码的开始和结束标签必须是
  • 1.网站建设基本流程是什么荣耀手机商城官方网站售后
  • 如何做网络投票网站苏州网络公司策划
  • 品牌做网站怎样做艾条艾柱网站
  • 网站后台维护主要做什么怎么做游戏网站的宣传图片
  • ps网站专题怎么做网页制作详细设计
  • 杭州有哪些做网站的公司网页设计基础介绍
  • 温州网站优化页面最超值的锦州网站建设
  • 免费网站引导页最优秀的无锡网站建设
  • 杏坛餐饮网站建站app研发过程
  • 模拟登录wordpress c长沙网站推广seo
  • 照着别人网站做青海省公路建设总公司网站
  • 徐州集团网站建设报价wordpress主题评论
  • 架设网站 自己购买服务器洛阳网络科技有限公司排名
  • 网站调用wordpress安卓开发软件安装教程
  • 笋岗网站建设建设电影网站如何赚钱
  • 免费网络推广方式淘宝做的网站优化
  • 阿里巴巴公司网站建设常州外贸建站
  • 海洋网站建设做网站番禺