功能奇数次执行和偶数次执行时的结果不同的故障复盘
场景:
将数据库查询到的数据,写入一个xls文件。
完成后,多点几次,发现一个问题,偶数次生成的文件比较小,打开一看,里面只有一行,只有标题,没有内容。
分析日志,发现偶数次执行时预期的执行进程中没有相关的日志打印
分析:
奇数次执行与预期一致,就不再分析了;
偶数次执行时虽没有找到日志,但生成的文件名与文件格式均与预期一致,唯独缺少文件内容。
重启进程打开调试,果然在偶数次执行时,Eclipse中相关代码并没有触发,这与预期进程中没有找到相关日志打印是一致的。
(事后分析:有与代码逻辑相现的结果文件名及标题,说明代码执行了,但在预期的进程日志没有找到打印,只能说明没有在预期进程中执行,但的确是执行了)
问题:
既然除缺少文件内容外,其它均与预期一致,说明相关代码肯定执行了。日志去哪了呢。
解决办法(在这个环节出了乌龙):
没有找到日志,说不定在其它地方有。然后使用NotePad++对整个目录搜索,最后得到的结论是没找到。
这个乌龙结论的原因忘了,不知正在搜索时,远程主机被其它人占用,然后再登陆时状态丢失,还是当时Notepad++卡死,重启了。
反思:
对可能的疑点或一个猜想一定要严谨的验证,大胆架设,小心求证,一定要小心求证。
这个乌龙,导致后面浪费自己和其它同事不少时间。
使用Notepad++搜索很大的目录时,一定要限定扩展名,不然搜到大文件或二进制文件,会导致Notepad++卡死后重启。
求助:
求助相关模块的同事,对方验证了下均表示他们的模块无异常,让我这边排查代码逻辑。
这就无解了,如果逻辑有问题肯定会抛异常,怎么可能找不到相关日志,报错或正常打印。
在求助的过程中,有一个同事在帮助分析偶数次执行时,给一个提示,让确定下偶数次执行时,执行功能的path,应该是进程吧(猜的,这块对我是黑盒)
由于当时一直纠结于为什么没有日志的事,把这个重要线索给忽略了。
转机:
正好遇到双休日,忽然想到这个故障,path中的root节点与另一个进程名很像,看看这个进程下有没有相关日志,
一查,果然有!!!!!!!!!!!!!!!!!!!!!!!!!!
日志的事有着落了,说明偶数次执行时,功能在另一个进程中执行了。
问题:为什么没有内容呢,标题都有
远程调试开一下,跟了代码,ResultSet中的确没有数据。
为什么呢????????
无解。。。。
在干其它事时,忽然想到,是不是数据库连接有问题,把断点打在获取Connection之后,一看dbUser不是预期的那个,打开PL/SQL,使用Connection中使用的帐户登陆Oracle,把日志中的sql在这个用户下执行一下,果然查询结果为空。
世界澄清了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
功能使用其它模块提供的获取数据库API,在不同进程下,这个API使用的dbUser是不一样的,这次比较巧的是,这个非预期dbUser中居然有表结构了。
解决:
与其它模块的同事协调处理办法。
反思:
故障出现了,肯定有其符合逻辑的原因,目标是根据已知的信息,大胆架设,小心求证,一定要求证。
一定不能陷在,看似矛盾的已知信息上,而让自己陷入死循环。要根据已知,架设可能导致这种结果的可能性,再来一一验证,最终找到真正的原因。
tips:
Notepad++文件件查找功能的help:
功能奇数次执行和偶数次执行时的结果不同的故障复盘相关推荐
- 冰雹数 任意给定一个整, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复。 通过观察发现,这个数字会一会儿上升到很高,
冰 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升到很高, 一会儿又降落 ...
- python可以实现的功能_Python 实现某个功能每隔一段时间被执行一次的功能方法...
本人在做项目的时候遇到一个问题: 某个函数需要在每个小时的 3 分钟时候被执行一次,我希望我 15:45 启动程序,过了18 分钟在 16:03 这个函数被执行一次,下一次过 60 分钟在 17:03 ...
- 操作系统原理,系统调用,系统调用与库函数API等函数之间的调用关系,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB
操作系统原理,系统调用,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB 一.系统调用:操作系统功能调用,用户在编程时可以调用的操作系统功能. 1.系统调用是操作 ...
- python实现excel中vlookup函数功能并打包为win环境可执行的exe文件
最近工作用到数据对比处理,Excel用的比较多,奈何自己VBA不够熟悉,复杂一点的功能,做起来挺吃力的,就想起了Python来解决. 将期望功能代码打包成exe文件,在window环境中运行,获得 ...
- drools 执行函数_Drools可执行模型还活着
drools 执行函数 总览 可执行模型的目的是提供规则集的纯基于Java的表示,以及方便的Java DSL以编程方式创建这种模型. 该模型是低级的,旨在为用户提供所需的所有信息,例如用于索引评估的l ...
- mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解
前言 在了解了MyBatis初始化加载过程后,我们也应该研究看看SQL执行过程是怎样执行?这样我们对于Mybatis的整个执行流程都熟悉了,在开发遇到问题也可以很快定位到问题. 更重要的,在面试中遇到 ...
- MySQL实战 | 01 当执行一条 select 语句时,MySQL 到底做了啥?
原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...
- 为什么预估执行计划与真实执行计划会有差异?
云和恩墨北区技术工程师 专注于 SQL 审核和优化相关工作.曾经服务的客户涉及金融保险.电信运营商.政府.生产制造等行业. 郭成日 本文由恩墨大讲堂154期线上分享整理而成. 一问题概要 对同一个 S ...
- linux程序循环执行,Linux之循环执行任务
简介 在Linux下,crond服务是实现周期性计划任务的工具之一,crond服务能在规定的时间去执行设置的命令.脚本,功能类似windows下的"计划任务".对一个多用户多任务的 ...
最新文章
- Linux k8s 启动 停止 查询状态 脚本
- RobotFramework操作API
- 成千上万的在线课程时,如何保持理智和学习编码
- Spring JDBC模板惯用方式
- SAP License:SAP成本收集器两则
- linux qt安装包下载链接
- Linux Bash脚本练习2
- 国军标GJB150.8A-2009淋雨试验第三方检测机构
- win10插上耳机还外放(win10插上耳机还外放怎么设置)
- XPDL之流程定义元模型
- 编写训练一年级学生10以内减法的程序
- Python爬虫爬小说《诡秘之主》
- Qt Designer+PyQt5 控件使用经验(不定时随缘更新)
- 【5G核心网】5G概念之-MICO Mode
- tcpmux TCP 端口服务多路复用
- 【千锋】网络安全学习笔记(三)
- 机械电子方向的一点心得
- 魔兽争霸:混乱之治+冰封王座 原版ISO镜像下载地址
- tomcat如何编译java_tomcat怎么编译java
- jackson Read 读取 json 文件和 Write 写入 json 文件 读写 json 文件