内容简介:在软件开发过程中,经常会遇到出现概率很低,但只要出现了就会对系统可用性影响很大的问题。这类问题总是在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组帧出口、视频解码出口、视频处理出口、视频渲染出口。
煲鸡压力测试
低概率问题其核心表现在于出现概率低。要突破概率限制,有两个办法:增加尝试次数和增加并发。两个方法的具体表现为:煲鸡测试和压力测试。对于压力测试,使用压力测试工具,增加大并发;对于煲鸡测试,利用煲鸡小工具,增加尝试次数。
压力测试和煲鸡测试都要考虑环境问题。这个环境是根据问题现象的推导出来的。针对视频卡顿问题,有一个现象是 夜晚发生 ,意味着可能网络并不差。因此我们在煲鸡测试时,特定针对这一现象,在周末过来煲鸡复现。
煲鸡是个拼耐心的过程,有些问题是可以通过其他手段监控提醒,有些问题是需要时刻盯着,否则转瞬即逝,还有一些问题是需要我们反复操作,记住操作步骤。
定位解决问题
等煲鸡测试复现该问题。可能很多次才会复现一次。上面的所有手段也无法保证我们一次解决问题。但也为我们向解决问题迈了一大步。如果经过一次复现,通过埋点数据,一次性解决问题皆大欢喜。如果不能解决,埋点数据能够为我们进一步分析问题。如果上次埋点的数据对你一点用都没有,这个时候就要好好反思。大多数情况下,埋点的数据会给我提供更多的思路。这个时候,可以通过评审代码,或者增加核心埋点数据,争取下次一次性解决问题。
反思总结
问题解决了,这个时候就要用手术刀来剖析自己了。剖析分为三点:
- 解决问题是否优雅
- 问题根源分析
- 潜在问题排查
- 后续问题避免
低概率问题处理流程
有些低概率问题就出现了一次,后续再也没出现,需要执行一定的流程。这个流程需要和测试人员共同制定。一个简单的流程如下:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro Django
Marty Alchin / Apress / 2008-11-24 / USD 49.99
Django is the leading Python web application development framework. Learn how to leverage the Django web framework to its full potential in this advanced tutorial and reference. Endorsed by Django, Pr......一起来看看 《Pro Django》 这本书的介绍吧!