功能奇数次执行和偶数次执行时的结果不同的故障复盘

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 场景:将数据库查询到的数据,写入一个xls文件。完成后,多点几次,发现一个问题,偶数次生成的文件比较小,打开一看,里面只有一行,只有标题,没有内容。分析日志,发现偶数次执行时预期的执行进程中没有相关的日志打印 分析:奇数次执行与预期一致,就不再分析了;偶数次执行时虽没有找到日志,但生成的文件名与文件格式均与预期一致,唯独缺少文件内容。

场景:
将数据库查询到的数据,写入一个xls文件。
完成后,多点几次,发现一个问题,偶数次生成的文件比较小,打开一看,里面只有一行,只有标题,没有内容。
分析日志,发现偶数次执行时预期的执行进程中没有相关的日志打印

分析:
奇数次执行与预期一致,就不再分析了;
偶数次执行时虽没有找到日志,但生成的文件名与文件格式均与预期一致,唯独缺少文件内容。
重启进程打开调试,果然在偶数次执行时,Eclipse中相关代码并没有触发,这与预期进程中没有找到相关日志打印是一致的。
(事后分析:有与代码逻辑相现的结果文件名及标题,说明代码执行了,但在预期的进程日志没有找到打印,只能说明没有在预期进程中执行,但的确是执行了)
问题:
既然除缺少文件内容外,其它均与预期一致,说明相关代码肯定执行了。日志去哪了呢。
解决办法(在这个环节出了乌龙):
没有找到日志,说不定在其它地方有。然后使用NotePad++对整个目录搜索,最后得到的结论是没找到。
这个乌龙结论的原因忘了,不知正在搜索时,远程主机被其它人占用,然后再登陆时状态丢失,还是当时Notepad++卡死,重启了。

反思:
对可能的疑点或一个猜想一定要严谨的验证,大胆架设,小心求证,一定要小心求证。
这个乌龙,导致后面浪费自己和其它同事不少时间。

使用Notepad++搜索很大的目录时,一定要限定扩展名,不然搜到大文件或二进制文件,会导致Notepad++卡死后重启。

求助:
求助相关模块的同事,对方验证了下均表示他们的模块无异常,让我这边排查代码逻辑。
这就无解了,如果逻辑有问题肯定会抛异常,怎么可能找不到相关日志,报错或正常打印。

在求助的过程中,有一个同事在帮助分析偶数次执行时,给一个提示,让确定下偶数次执行时,执行功能的path,应该是进程吧(猜的,这块对我是黑盒)

由于当时一直纠结于为什么没有日志的事,把这个重要线索给忽略了。

转机:
正好遇到双休日,忽然想到这个故障,path中的root节点与另一个进程名很像,看看这个进程下有没有相关日志,
一查,果然有!!!!!!!!!!!!!!!!!!!!!!!!!!
日志的事有着落了,说明偶数次执行时,功能在另一个进程中执行了。

问题:为什么没有内容呢,标题都有
远程调试开一下,跟了代码,ResultSet中的确没有数据。
为什么呢????????
无解。。。。
在干其它事时,忽然想到,是不是数据库连接有问题,把断点打在获取Connection之后,一看dbUser不是预期的那个,打开PL/SQL,使用Connection中使用的帐户登陆Oracle,把日志中的sql在这个用户下执行一下,果然查询结果为空。
世界澄清了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
功能使用其它模块提供的获取数据库API,在不同进程下,这个API使用的dbUser是不一样的,这次比较巧的是,这个非预期dbUser中居然有表结构了。

解决:
与其它模块的同事协调处理办法。


反思:
故障出现了,肯定有其符合逻辑的原因,目标是根据已知的信息,大胆架设,小心求证,一定要求证。

一定不能陷在,看似矛盾的已知信息上,而让自己陷入死循环。要根据已知,架设可能导致这种结果的可能性,再来一一验证,最终找到真正的原因。

tips:
Notepad++文件件查找功能的help:

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
JavaScript 测试技术
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
|
6月前
|
算法 前端开发
3029. 将单词恢复初始状态所需的最短时间 I
3029. 将单词恢复初始状态所需的最短时间 I
29 0
|
5月前
|
运维 Serverless 数据处理
函数计算产品使用问题之遇到生成没有反应、中止也不行,以及刷新后队列积累的问题,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
Python
从零到零点五,编译zeno节点系统
本文介绍了如何从零开始编译Zeno节点系统,包括编译后运行的结果、核心编译代码、编译文件目录、解决zenvis编译问题的方法,以及相关参考链接。作者提供了详细的步骤和命令,帮助读者能够成功编译Zeno,并分享了解决问题的经验和技巧。
从零到零点五,编译zeno节点系统
|
3月前
|
C#
C# 跳过值班时间代码逻辑
C# 跳过值班时间代码逻辑
30 0
|
4月前
|
敏捷开发 测试技术 持续交付
编码过程中有效地管理时间和精力,避免陷入无休止的调试循环
编码过程中有效地管理时间和精力,避免陷入无休止的调试循环
|
6月前
|
Java Linux Windows
记一次排查循环依赖的经历
记一次排查循环依赖的经历
|
Web App开发 存储
用9种办法解决 for 循环取 i
用9种办法解决 for 循环取 i
95 0
好家伙!查看系统日志时我捕获了一只发生概率小于万分之一的Bug
在开始这篇文章之前想先说一句:如果一套系统暂时没问题,那只是因为它的并发量不够而已。 上周在查看系统日志时,发现了一条与众不同的日志。日志中有一半内容是正常的报文数据,而另一半内容是0x00这样的空数据
|
JSON NoSQL Redis
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
101 0