首页 > 其他分享 >一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障

时间:2022-12-14 18:05:33浏览次数:74  
标签:10 P0 请求 Trace 故障 线程 日志 摄像头

本文作者是曾有4年开发经验,期间担任过多个项目团队的开发leader,现任Kindling开源团队的产品经理。作者曾因一次愚蠢的操作引发了线上P0故障,导致月工资扣了10%,年底绩效-1,连带上级leader也被扣钱,全公司邮件通报批评,大型社死现场作者想通过自己这次悲催的经历,告诉普通开发同学如何实现在10分钟黄金时间内快速排障。

如果你问我是否见过凌晨4点的太阳?

我只记得曾经在凌晨1点被生产环境的告警短信炸醒;

在凌晨2点被运维的电话喊醒;

在地铁上、演唱会上、火锅店里端着电脑查bug;

......

P0故障描述&排查过程

我相信很多很多一线开发同学对于上述场景深有感触,生产环境非乐土,各有各的苦,我当时背的这个P0故障现象是:晚8点我们电商平台开启促销活动后,客服收到很多用户反馈说系统响应特别慢,大量用户下单失败。我们看到监控大盘和日志,没有报错和告警,接口响应时间也没有什么波动,但是我们看到客户端出现大量超时报错,所以怀疑服务hang住了,重启服务后,客户端短暂恢复,5分钟后又出现timeout错误。

面对“精彩纷呈”的bug们,我们通常的常规操作是:

  • 看监控大盘,基础资源(网络、内存、并发量)等等是否有异常
  • 查日志
  • 查数据库
  • 根据场景看测试/本地环境是否能复现调试
  • 基建完备的公司可能接入了Trace追踪,可以查Trace明细
  • 寻求资深大佬的帮助

我当时也用了这一套“组合拳”,查了一会无果,我真的是欲哭无泪。眼瞅着波及范围面越来越广,其他普通订单也受到影响,P1升级P0,只能“壮士断腕”,立即回滚。

是不是很诡异?如果是你接下来怎么查?

最后我只能根据本次迭代发布代码,和上一稳定版本仔细比对变更,我相信很多开发都用过比对变更的代码内容去倒推故障原因的方法,小发布还好,但我们这次促销活动是大迭代,变更量大,此操作费时费力。

最后定位到原因是当时我在本地调试的时候自测某个场景,把服务器的最大线程数改的特别小,但是提交代码的时候没注意提交上去了,导致大量用户请求发过来之后,服务端线程资源不够,请求只能排队等待。做code review的leader也没注意,所以他的当月工资也被扣了10%。而当时我们的监控大盘也缺少对应用所用线程池的关键指标的监控。

同一问题,怎么在10分钟内快速排障

今天我模拟了当时的场景,接入Kindling程序摄像头Trace Profiling工具,可以看到用户在客户端感受到的慢请求如下图:

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障_线上故障

这个图怎么看?

  • 序号1线程是本次请求执行主线程,我们可以看到本次请求,在2处就已经被负责IO的的线程把请求流读进来了,但是在3处才开始由服务端的task线程真正执行处理。
  • 4表示请求执行结束,IO流近乎同时返回客户端

这说明请求慢是因为请求在排队等待资源,请求流IO进来的时候系统没有足够的资源去处理它。而普通监控系统对于服务响应时间是从CPU执行计算这一刻开始的,所以这就造成了虽然客户端感知到了慢,但从服务端看起来还是风平浪静。

但是当年并没有程序摄像头Trace Profiling这个工具,10分钟内根本查不出来,故障时间越长,锅越大。

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障_java_02

话说回来,程序摄像头工具的能力远不止此:

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障_线上故障_03

比如上图中的三角形图标就表示,此处有打印业务日志,并且点击后可在事件详情中查看;橙色的区块表示这是net事件,点击后也能查看报文,如果这个net事件是访问数据库,我们也能看到具体执行的sql语句......

也就是说,它把你需要查看的各种数据信息,都完整附着在对应的线程上,保留下来。像以前我们查日志都是登陆到日志系统,根据时间或者TraceID等关键字去筛选;查生产数据库的话还要走各种审批流程,等审批下来,饭碗都快没了。

关于程序摄像头更详细的监控排障能力介绍可参考:

​eBPF程序摄像头——力争解决可观测性领域未来最有价值且最有挑战的难题​



一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障_java_04

刚入行的时候我们经常干出把本地调试代码误提交、merge错分支、把别人的代码覆盖掉等等这些蠢事。

排查问题也像无头苍蝇一样,尤其是遇到通过日志、或者本地复现都查不出原因的bug时,更是欲哭无泪。Trace Profiling就是为了帮助开发从与生产bug“纠缠恶斗”中解救出来,它真实还原了程序执行现场,把bug的“犯罪证据”都搜罗起来给你整理展示。

我们后期会继续推出相关系列文章,以大家在生产环境中会遇到的常见故障场景为例,实现在10分钟黄金期内快速排障。

​Kindling官网​

​Kindling开源项目地址​

有任何问题或者想加入kindling开源社区交流程序摄像头Trace Profiling工具的小伙伴,欢迎联系小编~

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障_java_05

小编

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障_线上故障_06

kindling公众号


标签:10,P0,请求,Trace,故障,线程,日志,摄像头
From: https://blog.51cto.com/u_15454208/5937958

相关文章

  • 【雕爷学编程】Arduino动手做(110)---JDY-31 蓝牙模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的......
  • ASEMI肖特基二极管MBR10200FCT参数,MBR10200FCT规格
    编辑-ZASEMI肖特基二极管MBR10200FCT参数:型号:MBR10200FCT最大重复峰值反向电压(VRRM):200V最大RMS电桥输入电压(VRMS):140V最大直流阻断电压(VDC):200V最大平均正向整流输出电......
  • 能让Java开发者提高效率的10个工具
    ​ Java受到全球百万计开发者的追捧,已经演变为一门出色的编程语言。最终,这门语言随着技术的变化,不断的被改善以迎合变化的市场需求。无论你是否拥有一家科技公司,软件已经......
  • PHY10. 学习粒子物理
    大概是之前学规范场论学到一定程度后,不得不开始学点粒子物理了……但这一块由于太枯燥了之前一直没坚持下来,所以来这里做一些寒假的计划和安排。寒假计划跟随刘佳老师的......
  • 华三路由器设备如何一条命令shutdown所有10GE端口?
    https://zhiliao.h3c.com/questions/dispcont/183184点击查看代码interfacerangetg1/0/1totg1/0/4shutdownquit......
  • BL110网关远程监测充电桩断网故障解决方案
    在碳中和等因素的影响下,燃油车逐步退出市场,新能源汽车逐步替代燃油车市场,获得了爆发性增长的市场空间。近年来,中国新能源汽车市场保持高速增长,新能源汽车当前的保有量、增......
  • OpenMLDB 社区月报 | 2022年10月
    OpenMLDB开源机器学习数据库,提供线上线下一致的生产级特征平台。技术动态十月v0.6.3&v0.6.4新特性离线引擎升级到支持Spark3.2.1增加ValidateSQL接口C......
  • 10
    快递代拿项目(第十组)终稿项目需求说明书项目名称校园快递代拿小程序成员分工徐迪                        ......
  • 去哪儿是如何做到大规模故障演练的?|TakinTalks
    #一分钟精华速览#混沌工程作为一种提高技术架构弹性能力和容错能力的复杂技术手段,近年来讨论声音不断,相比在分布式系统上进行随机的故障注入实验,基于混沌工程的大规模自......
  • 去哪儿是如何做到大规模故障演练的?
    #一分钟精华速览#混沌工程作为一种提高技术架构弹性能力和容错能力的复杂技术手段,近年来讨论声音不断,相比在分布式系统上进行随机的故障注入实验,基于混沌工程的大规模自动......