记一次调Bug经历
20190314
XX的保密项目XX软件运行卡慢,20190313-20190315前去维护
软件基本功能
接收并存储其他几个系统发来的大量数据,解析后刷新显示在界面上。
软件问题描述
1.软件运行后正常运行,但是过一段时间后软件会进入卡顿状态:正常每秒刷新的数据现在几秒甚至几十秒刷新一次,界面切换反应及其迟钝。
2.有时候软件开始运行后直接进入上述卡顿状态,及其影响软件使用。
问题排查过程
1.运行后查看【任务管理器】的进程,发现内存占用明显上升。应该是由于数据量过大导致的卡顿。
2.分析软件功能和逻辑,问题可能出现在【数据解析】或者【页面刷新】两部分上。【数据解析】时数据量过大,导致无法实时处理软件卡慢;【页面刷新】时要显示的数据量过大,不能及时刷新显示导致软件卡顿。
3.对数据解析的线程里面的全部解析函数添加调试输出,运行软件,发现这些输出的频率不论软件卡不卡顿基本保持不变。基本排除数据解析导致的软件卡顿。
4.对【刷新显示】的全部线程分批注释之后运行软件,发现有时卡顿有时正常。不断注释调试,发现【显示日志】的线程和软件卡顿有直接相关关系,问题应该出在日志显示这里。
5.进入日志显示的函数查看,发现函数的逻辑是读取当天的日志文件的全部内容并更新在页面上。每秒要写入好几条日志,每写入一条日志该函数就执行一次。由此分析,当文件较大时,每秒要读取几次全部内容,当然会进入卡顿。当当天的日志文件较少时,开始运行时一切正常,但是随着运行时间该文件变大,软件就会进入卡顿状态。当当天的日志文件较大时,开始运行时就会进入卡顿状态,分析结果和实际Bug表现完全一致。
6.软件当天的全部日志文件不至于那么大。但是软件可以设置当前运行时间,当同一天被多次运行时,当前的日志文件就会超出正常大小,导致软件卡顿。
问题解决
找到了原因,那么解决方法有多种。可以从文件读取部分内容显示,也可以减少该函数的调用次数等。
经过分析和与软件使用者沟通,我选择直接在该解析函数第一行return注释掉该函数。页面上有查看日志的按钮,点击即可读取全部的日志内容。那么该更新函数就有点鸡肋。为了避免问题直接选择了注释掉该函数。
注释后三次半小时不间断测试,bug没有再出现。
分析总结
排查问题要有自己的思路,在了解软件和技术的基础上进行步骤分析。
大胆质疑,小心求证。