销售热线:0427-3030643
快乐赛车 > 新闻动态 > 震惊48小时后,阿里工程师如何在紧急定位线上泄露记忆?

快乐赛车

联系方式
  • 快乐赛车有限公司
  • 联系人:叶帅
  • 电话:0427-3030643
  • 邮箱:desdev@vip.qq.com
  • 地址:广东省从化市灯具城一品明珠A区沿街商铺45号

新闻动态

震惊48小时后,阿里工程师如何在紧急定位线上泄露记忆?

[ 作者:快乐赛车 日期:2020-01-29 11:33 ]

  14:04:28、的警报显示,一只Follower意外退出了目前的昆仑,并通过选;举重新加入了昆仑。16:06:35的警报显示,一名猎人在事故中重新启动了警卫,并在02、:56:42再次加入了昆仑。警报器显示,一个Follower出人意料地重新启。动了监护程序,并在12:21:0&#;4再次,加入,黄金。警方的警报显示,一只Follow!er意外退出了目前的昆仑,并通过选举、重新加入了昆仑。下图显示了基于Paxos实现的一致性维护功能模块。前端代理客户端和一致单位的通信支。持服务水平的扩、展。由于后端分布式一致单元由五台主机组成,可以容忍同时挂断两台机器。因此,上述警,报器没有发现对服务可用性的影响。然而,在短时间内经常发生一个主要的&#;服务过程是一个巨大的隐患。特&#;别是,操作调度强烈依赖于分布式。协调服务的业务。因此,我们开始关注这一问题。

  首先,我们排除了网络问题,通过;TSAR命令检;查机器上的网络指标是否正常。通过内部网络。平台查看机器上的网!络设备和网络链接也是健&#;康的。当我们回到日志时,我们从Lead&#;er日志中找到了线索。所有的,Leader都主动关闭了与Follower的通信通道。

  当然,我们想知道为!什么Leade&#;r经常关闭与Follower通信通道的答案也在日志中。Follower很长一段时间没有向L快乐赛车eader,发送请求,包括Leader发送的心跳,包。因此,莱德被认为是、一个异常的折叠,然后关闭通信通道,并将它踢出目前的库,鲁姆。

  好吧,现在你可以直观地解释&#;为什么报,警:福勒在很长一段时间内都失去了与伦敦的联系。引发了退出;夸朗的逻辑(如果退出夸朗的过程缓慢),它将!进一步触发直接退出过程逻辑的快速恢复。

  所以一个新的问题是,为什么这些Followers不回答光的心跳要求?这一次,没有直接,的日志来回答我们的疑虑。幸运的、是,有间接的信息。在出现问题之前,Fo,llower的日!志输出被打破了很长一段时间(超过了触发退出的阈!值)。;在一个经常需要访问分布式协调服务的商业集群中,这几乎是不可想象的。我们更喜欢相信后端的过程,而不是;没有用户的要求。

  在没。有其他调查的;情况下,基于JA实现的后端分布式一致单元。我们检查了GC日志,在Follower问题期间发现了原因&#;。与Jagc有关的Parnew需要很长时间才能完成。下图显。示了机器上的类似日志。我们知道,Jagc的过程是一个STW(Stop-the-World)、机制,、除了垃圾收集器的其他线程。这可以解释为什么后端的Follower线程将在短时间内保持下去。

  虽、然我们&#;的JA程序的初始内存很大,但实际分布是虚拟内存。Parnew需要太长时间,很可能机;器上的实际物理内存不足。

  根!据这个想法,我们进一步使用顶部命令&#;查看存储占用的过程。,结!果表明,在机器上混合部署的前端Proxy过程中使用的内存&#;已达到整机的66%。

  进一步检查系统日志。研究发现,一些机器的前端Pr,oxy过程是由于缺乏记忆的OO。M错误而被系统KILL所致。在这一点上,我们开始调查前端P,roxy内存泄漏。

  该业务严重依赖分布式协调服务的发现功能。以本次、调查的业务集群!为例,单组注册的服;务地址数量达到240K分析地址450W。分配协调服&#;务的稳定性直接影响集群业务的健康。运行。

  在明确了分布式协调服务;Proxy过程中存在内存泄漏的风!险后,我们对其他在线集群进行了紧急检查,发现这一问题并不是独、一无!二的。在GCORE的前,端Proxy网站之后,风险危&#;险不能保持到11点,我们做出了紧急的改变。一个接一&#;个地重启了上述风险集群的前端Pro。xy过程,并暂时缓解了在线风险。

  继续调查问题。。在重新;启动Proxy过程之前,GCORE保留了现场(在此强。调。在线GCORE必须小心,特别是在内存占!用这么大的过程中,这很容易导致处理亨格的请求。我们的基础是,分布协调服务的客;户端具有加班机制,可以;承担一定的GCORE操作。

  因为前端Proxy的主要内存成本是基于订阅,实现的有效地址缓存。首先,,我们检查了GDB,以保持缓存的无限大校因此,这个尺寸符,合预期(正如监视指标所显示的),它不会占用1GB以上的空间,。远远、超过1GB。在这一点上,我们进一步证。实,工作室的空间占用不超过一次。我们的调查陷入了困境。

  这时,我们想到了兄弟团队中一位伟大的神的杰作。介绍了在线环境调查!C/C应用程序内存!泄漏问题(一些学。生可能会提;到、阀门工具为什么不需要。首先,这件艺术品在测试环境中是必要的,但毕竟,可能会有一些丢失的场景在网上发布,导致线上存。储泄漏。此外,、在大型项目中,阀门的运行速度太慢,甚至导致程序,不能正常工作。这里还提供了调查&#;内存泄漏的另一个角度。假手表。每个类别都有一个错误的表格,同一、类别的所有物体都指向相同的虚拟表格(通常是每个物体的前8个字节)。因此,如果计算每个虚拟手表指针的频率,你可以知道有多少不正常的物体被分配,那&#;么就有可能发生存储泄漏。

  伟大的上帝提、供了一种内存泄漏调查工具(说明这种工具是基于规则&#;的TCMALC内存管理方法)。通过符号;表找到。每个V&#;TABLE,您可以,知道虚、拟。手表地址,即每个虚拟功能类别的前8个字节的内容。该工具的强大部分是摆脱GDB的依赖,并根据应用程序申请的所有内存块分析找到所有泄漏的内存块地址。进一步统计每个虚拟手表类、别的对象数量。最后,我们统计的虚!拟手表信息超过10W,找出了罪&#;魁祸首。科蒙:克洛苏!尔的目标泄露了多达16亿。

  GrepClosure-rproxy-Grep!Envproxy/io_handler最终定位的原因实际上与我们对P&#;roxy日志的分析有;关。我们在日志上发现了大量的非法访问请!求。客户端试图分析角色注册服务地址,但使用&#;错误的集群参数。在单个Proxy机器上刷!出4000个错误的日志。那么,,这是否是由于持续的错误路径造成的内存泄漏?

  我们仔细研究了这个代码。CheckCal、l对象正常进入执行逻辑(Commo&#;n:Closure在执行后自动释放内存)。但是在不正,常的。道路上,比&#;如上面的非法集!群名称,功能将直接下降。相应的CheckCall对象不会随着业务、的不断访问而分析,并、且会继续产生内存泄漏。

  计划2的运动在灰度窗。口没有足够的升级之前有了很大的提高。最后,,我们根据&#;日志中持续;的;非,法访问路径选择了计、划。我们联系商界人士,协助调查和确定哪些客户端程序使用错误的集体名称访问分布协调服务,以进一步找出原因。最后,业务方通过紧急在线Hotfix消除了对错误集群&#;名称的访问。业务线分布协调服务前端Proxy过程中存储泄漏的趋势得到了控制。

  当然,&#;根本的修复方法是从Proxy前端处理CheckCall的异常路径。。我们的修复方法是!遵循函数实现;单一出口原则的功。能,并在异常路径下进行。在执行逻辑中判,断错误代码的直接记录不是实际的检查逻辑,而是触发自我析分。的行为。维修将在国庆假期后发布。

  稳定性工作需要从细,节;开始。我们需要跟踪每一个在线服务或服务指标的异常情况。找到工!作室并继续跟进风险修、复,以便更稳定的分布系统。这条路很长,我会上上下下,和你一起;去。

相关推荐
  • 义乌:最低营业额为1.2元,超过北京和上海
  • 草浆的分类和缺点
  • 二论推进遂宁高新技术产业园区建设发展
  • 福建三明供电公司:加强输电线路隐患的调查,为电网安全奠定坚实的基础
  • 全球首个5G电话打通了 5G手机争霸赛鸣枪
  • 加拿大工程院院士顾培华:产品制造业应更加重视设计
  • 2020年,钢铁前景:成本向下移动,利润不稳定
  • 震惊48小时后,阿里工程师如何在紧急定位线上泄露记忆?
  • 福州的三名学生是Yabi 建造一个变形和移动的超级发电站
  • 网上名人奥雪双黄蛋冰淇淋抽查细菌超标,问题来自零售终端