内容简介:在软件开发过程中,经常会遇到出现概率很低,但只要出现了就会对系统可用性影响很大的问题。这类问题总是在JIRA上被挂起,时不时的在测试中被报出来。不解决是永不歇停的。因此,在这里根据我遇到的各种低概率问题,整理出一套解决问题的方法,希望在解决其他低概率问题时能够有些借鉴。明确问题现象对于解决分析问题有很大的帮助。有时候,我们看到的现象只是表面的,或者只是具体现象的某一部分。以视频会议为例,当出现视频画面卡顿,如果我们只关注这一现象,很有可能认为是丢包了。但卡顿这个现象和更多的细节有关:越多的信息能够更好地帮
在软件开发过程中,经常会遇到出现概率很低,但只要出现了就会对系统可用性影响很大的问题。这类问题总是在JIRA上被挂起,时不时的在测试中被报出来。不解决是永不歇停的。因此,在这里根据我遇到的各种低概率问题,整理出一套解决问题的方法,希望在解决其他低概率问题时能够有些借鉴。
明确问题现象
明确问题现象对于解决分析问题有很大的帮助。有时候,我们看到的现象只是表面的,或者只是具体现象的某一部分。以视频会议为例,当出现视频画面卡顿,如果我们只关注这一现象,很有可能认为是丢包了。但卡顿这个现象和更多的细节有关:
- 卡顿周期:是一直卡顿还是周期性出现卡顿,卡顿周期是多少?
- 是否丢包:丢包率是多少?是否持续丢包?
- 卡顿发生时间:是白天还是晚上?是工作日还是周末?
越多的信息能够更好地帮助我们分析问题,不要急于下定论。低概率问题也存在出现的时候,出现时首先要仔细观察,明确问题现象。由于低概率问题出现概率很低,这次观察的结果至关重要。
这里需要谨记:我们要关注哪些现象与我们具体的业务有关。因此利用自己的经验,但不要局限于现存的经验,开阔的思维有利于问题的解决。
引入分析工具
团队在项目一开始就要制订潜在的问题分析 工具 开发计划。分析工具能够帮我们定位深层次的现象,并将干扰现象排除在分析之外。一般情况下,团队需要哪些工具帮助分析是很好规划的。工具可能是产品软件的自带功能,也可以是第三方或者自研的小工具。在我们视频会议团队,存在如下分析工具:
graph LR 分析工具-->第三方 第三方-->Wireshark 第三方-->IPerf3.0 第三方-->SocketTools 第三方-->Elecard-StreamEye-Tools 第三方-->YUVPlayer 第三方-->MFTools 第三方-->Network-Emulator-Toolkit 分析工具-->自研 自研-->音频分析小工具 自研-->视频分析小工具 自研-->音视频数据Dump 自研-->日志分析工具 自研-->煲鸡功能 自研-->性能测试小工具
如果因为缺少分析工具,而导致存在的问题迟迟不得解决,或是解决迟缓。开发人员自己需要反思。针对于视频卡顿问题,在发现时我们利用了两个工具:视频分析小工具和Wireshark。通过WireShark我们定位到当前网络没有丢包。通过视频分析小工具我们定位到问题出现在接收端。现在我们能够确定的当前现象是:
- 视频卡顿
- 网络无丢包
- 周期性卡顿
- 夜晚发生
分析问题现象
不要急着去看代码。先分析可能导致这个现象的原因,并根据各种可能原因做好准备。力求一旦下次出现,一次性定位问题。上面的例子总体现象是卡顿,包含了三个细节内容,针对现象和细节部分做针对性分析:
graph LR 卡顿问题-->卡顿现象 卡顿现象-->采集/预处理/编码/发送 采集/预处理/编码/发送-->排除 卡顿现象-->网络波动 卡顿现象-->接收 卡顿现象-->解码 卡顿现象-->处理 卡顿现象-->渲染 卡顿问题-->周期性卡顿 周期性卡顿-->周期性网络波动 周期性卡顿-->代码周期性丢包 卡顿问题-->无丢包 无丢包-->排除网络丢包因素 无丢包-->网络抖动 卡顿问题-->夜晚发生 夜晚发生-->网络因素影响
现象分析可能会引入一系列可能原因,先将所有可能的原因罗列出来,然后逐项排查。无法排除的就是我们分析的关键。对问题正确的分析,能够帮助我们少走很多弯路,这个需要耐心。
调用链分析
对于问题现象一定存在着一条调用链,这个调用链中某一个链条出错,进而导致问题发生。通过调用链分析,我们能够更深层次的理解这个问题的可能原因,并且有可能在分析过程中就找打了问题的根源。
对于调用链简单的问题,可以直接评审代码,尝试找到问题。但是对于调用链很复杂,涉及很多模块,直接评审代码就和大海捞针一样。此时需要做的是熟悉核心调用步骤。如果代码是自己开发的,只要时间不长大多都熟悉,但是如果是长时间未维护或者是第三方代码,熟悉核心调用步骤就极为重要。
针对视频卡顿场景,需要熟悉的调用链步骤包含:RTP接收、RTP组帧、视频解码、视频处理、视频渲染。
潜在原因埋点
调用链分析无法找到原因时,就需要进行潜在原因埋点。埋点通常是通过日志和数据上报。埋点要注意粒度、频度和准确度问题。
- 粒度:调用链核心步骤
- 频度:不影响正常数据分析
- 准确度:埋点信息要全面,埋点位置合理
针对视频卡顿场景,最终埋点的地方为:RTP接收出口、RTP组帧出口、视频解码出口、视频处理出口、视频渲染出口。
煲鸡压力测试
低概率问题其核心表现在于出现概率低。要突破概率限制,有两个办法:增加尝试次数和增加并发。两个方法的具体表现为:煲鸡测试和压力测试。对于压力测试,使用压力测试工具,增加大并发;对于煲鸡测试,利用煲鸡小工具,增加尝试次数。
压力测试和煲鸡测试都要考虑环境问题。这个环境是根据问题现象的推导出来的。针对视频卡顿问题,有一个现象是 夜晚发生 ,意味着可能网络并不差。因此我们在煲鸡测试时,特定针对这一现象,在周末过来煲鸡复现。
煲鸡是个拼耐心的过程,有些问题是可以通过其他手段监控提醒,有些问题是需要时刻盯着,否则转瞬即逝,还有一些问题是需要我们反复操作,记住操作步骤。
定位解决问题
等煲鸡测试复现该问题。可能很多次才会复现一次。上面的所有手段也无法保证我们一次解决问题。但也为我们向解决问题迈了一大步。如果经过一次复现,通过埋点数据,一次性解决问题皆大欢喜。如果不能解决,埋点数据能够为我们进一步分析问题。如果上次埋点的数据对你一点用都没有,这个时候就要好好反思。大多数情况下,埋点的数据会给我提供更多的思路。这个时候,可以通过评审代码,或者增加核心埋点数据,争取下次一次性解决问题。
反思总结
问题解决了,这个时候就要用手术刀来剖析自己了。剖析分为三点:
- 解决问题是否优雅
- 问题根源分析
- 潜在问题排查
- 后续问题避免
低概率问题处理流程
有些低概率问题就出现了一次,后续再也没出现,需要执行一定的流程。这个流程需要和测试人员共同制定。一个简单的流程如下:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
High-Performance Compilers for Parallel Computing
Michael Wolfe / Addison-Wesley / 1995-6-16 / USD 117.40
By the author of the classic 1989 monograph, Optimizing Supercompilers for Supercomputers, this book covers the knowledge and skills necessary to build a competitive, advanced compiler for parallel or......一起来看看 《High-Performance Compilers for Parallel Computing》 这本书的介绍吧!