`
wx1569578408
  • 浏览: 71434 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

调试一个没有root cause的异常

 
阅读更多

180648_Rc64_3492483.png    

    今天服务器上跑的应用针对一个账号抛了异常,然而服务器并没有跟踪到异常从哪里抛出。像以往一样,我上服务器备份数据。由于数据量非常大,我是对指定的表进行备份的(结果疏忽了,漏了一张重要的表)。

    恢复本地跑了一下,一切正常,可以正常打开页面。查看tomcat的日志记录,也没发现异常的stack trace.考虑到数据已经恢复了,本地测试正常,切换账号测试也是正常的,那就不可能有问题啊。

182755_zS5G_3492483.png

    从日志中可以看到执行的方法已经缓存,说明方法已经成功执行了。但让我不解的是每次都会重新Cache一次,说明方法执行后的返回结果是null. 但如果拋了异常的话就不可能Cache啊。如果方法执行后的返回结果为null,在后面确实会抛出java.lang.nullpointerexception。

    于是我看了看方法的返回值,确认了方法是不可能返回null的,如果没有数据,只会返回一个占存储空间的对象。到这里,我怀疑服务器是否内存不足,导致程序出了难以形容的bug。

    于是我又看了一下服务器的资源占用情况,内存不足的这个猜测可能不对,但又不能否定。我觉得是jvm分配的内存太少导致。。。于是时间就这么耗掉了。

    最后,我否定了之前的所有猜测,原因是既然只有这个账号出了问题,运行坏境出问题的可能性应该是非常低的。无奈之下,我写了个测试方法,在本地遍历所有账号的所有数据调用可能出问题的那个方法,期待的结果终于出来了,发现了一个bug:184028_OBtj_3492483.png,我又重新备份了服务器上的数据,在本地测试了一下,果然抛出了同样异常。于是我知道了我之前少备份了一张表,进而被其他可能的因素套进去了。

    还剩下两个问题,1. 服务器并没有跟踪到抛出异常的起点。2. 为什么那个方法没执行成功却能缓存结果。第一个问题stackoverflow上有人说是sun jvm优化的结果,把异常信息去掉了。要加入jvm参数 :-XX:-OmitStackTraceInFastThrow ,问题链接:https://stackoverflow.com/questions/2411487/nullpointerexception-in-java-with-no-stacktrace

,第二个问题我查了一下自己写的@Cache的实现,是放在finally中的,所以不管前面是否拋异常,都会执行。(真是一连串的坑啊)

    总结:1. 如果我备份数据没遗漏,一下子就解决了这个问题,但现实总不可能每次都那么顺利。2. 遇到问题不要似懂非懂地解决,那样不是解决问题的办法。要对问题有十足的把握,知其然和所以然,不然不能放心。3. 尽可能多尝试测试的方法,也许会比较幸运。今天就是这样,如果所有账号每天的数据都是规律的,就不可能提前发现这个bug,我还得耗多一会吧。

转载于:https://my.oschina.net/eyesos/blog/1335230

分享到:
评论

相关推荐

    Root Cause Analysis_Study Book

    ### Root Cause Analysis (RCA) – 一种系统性问题解决方法 #### 概述 Root Cause Analysis(简称RCA)是一种被广泛应用于不同行业的系统化...无论是工业安全、质量管理还是信息技术领域,RCA都是一个不可或缺的工具。

    Root Cause Analysis_学习手册

    虽然这是一个准确的描述了发生了什么以及如何发生,但如果分析人员仅仅停留于此,他们就没有深入探究导致这个错误的根本原因。因此,他们不知道应该采取什么措施来防止此类事件再次发生。 #### 三、RCA的过程 RCA...

    BS EN 62740:2015 Root cause analysis 根本原因分析 (RCA) - 完整英文电子版(72页)

    完整英文电子版 BS EN 62740:2015 Root cause analysis (RCA)- 根本原因分析 (RCA) 。BS EN 62740:2015描述了根本原因分析(RCA)的基本原理,并指定了RCA过程应包括的步骤。该标准标识了RCA技术的许多属性,这些...

    Root精灵ROOT前如何打开USB调试模式.docx

    Android 作为一个广泛使用的移动操作系统,其 USB 调试模式的开启对于开发者和 Root 用户来说非常重要。本文档将总结 Android 不同版本下的 USB 调试模式开启方法。 一、Android 2.1 ~ 2.3.7 系统下的 USB 调试模式...

    【异常注入工具】AIR-BAGLE:An Interactive Root cause-Based Anomaly Genera

    总的来说,AIR-BAGLE是事件日志分析领域的一个重要工具,它不仅有助于提升异常检测和处理能力,还为研究和改进流程挖掘技术提供了强大的实验平台。通过使用AIR-BAGLE,可以更有效地评估和改进事件日志的清理方法,...

    如何通过调试获取光猫root权限.pdf

    获取root权限后,用户可能会访问到一个全新的命令行界面,这个界面允许用户执行一系列高级操作,包括但不限于: - 安装第三方固件以增强光猫功能。 - 修改系统设置,以提升无线网络的安全性和性能。 - 调整各种参数...

    一键冰箱免ROOT指令.zip_ROOT_冰箱app免root_冰箱一件免root_冰箱一键_安装冰箱免root

    在没有ROOT权限的情况下,这通常是一个挑战,因为大多数系统级别的操作都需要管理员权限。 描述中提到的“在未获取root权限平台上,使用adb shell启动冰箱icebox并正常使用”,意味着用户可以通过Android Debug ...

    ubuntu添加root用户后没有声音

    在Ubuntu系统中,尤其是版本12.04中,用户可能会遇到一个常见问题:当通过命令行或图形界面激活或创建root用户后,系统突然失去了音频功能,即没有声音。这个问题可能源于Ubuntu对权限的严格控制,特别是对于音频...

    手机强制开启USB调试模式

    3. 获取Root权限:开启USB调试是Root过程中的一个步骤,因为这有助于安装必要的工具和传输文件。 4. 更新系统固件:开发者可以通过USB调试模式将自定义ROM或其他系统更新推送到手机。 5. 调试应用:对于开发者来说,...

    CloudRCA:云计算平台的根本原因分析框架_CloudRCA A Root Cause Analysis Framework

    这些工程化的特征随后被输入到一个基于知识的分层贝叶斯网络(Knowledge-informed Hierarchical Bayesian Network,简称KHBN)模型中,以高准确性和效率推断出根本原因。CloudRCA的设计目标是提高故障诊断的精确度,...

    傻瓜式一键z4root、root explorer软件

    运行z4root后会出现一个骷髅头图标(busybox)此图标以后用来管理对上述程序的root权限。4.点击打开骷髅头图标,程序打开后会显示上述两个程序,将这两个程序的授权设为允许。5.运行root explorer将权限设为最高就可以...

    Root_java_rootcheck_ROOT_

    然而,对于开发者来说,判断一个Android设备是否已被root,是非常重要的,因为这关系到应用的安全性和兼容性。本源码提供了一种方法来检查设备是否已被root。 在Java中,检查Android设备是否被root通常涉及以下几个...

    Node.js-SwissArmyKnifeAndroid免root兼容所有版本UI调试工具

    为了解决这个问题,`SwissArmyKnife`应运而生,这是一个基于Node.js的工具,无需Root权限即可在所有Android版本上进行UI调试。 SwissArmyKnife利用了Node.js的强大能力和Android的ADB(Android Debug Bridge)进行...

    网络机顶盒root工具

    "root.bat"是一个批处理文件,常见于Windows环境下,用于执行一系列自动化命令来实现root过程。用户只需运行该脚本,即可启动root操作,简化了对网络机顶盒进行root的步骤。 "AdbWinApi.dll"和"AdbWinUsbApi.dll"是...

    beyond_monitoring_root_cause_analysis.pdf

    beyond_monitoring_root_cause_analysis.pdf

    root 模拟器工具打包

    "install root_checker"指的是安装一个名为"root_checker"的应用程序,这可能是一个用于检测设备是否已获取root权限的工具。这样的应用通常会检查系统中的su二进制文件(超级用户权限的执行文件)和其他root相关标志...

    z4root一键ROOT工具_1.2.2

    一键root工具(z4root)是一款一键获取ROOT权限的强大软件。在手机端安装z4root以后,点击root,然后手机自动重启即可root,如果root不成功或者出现bug,重启机器即可恢复之前状态。G3测试成功,其他机型请自测。 ...

    电视盒子万能root.zip

    电视盒子万能root.zip是一个专为智能电视盒和智能电视设计的Root工具,它通过ADB(Android Debug Bridge)shell界面来实现对设备的Root权限获取。ADB是Android开发者用于调试和控制Android设备的重要工具,它允许...

    IEC 62740:2015 Root cause analysis - 根本原因分析 (RCA) - 完整英文版(69页)

    完整英文版IEC 62740:2015 Root cause analysis (RCA)- 根本原因分析 (RCA)。本文件描述了根本原因分析(RCA)的基本原理,并指定了RCA过程应包括的步骤。该标准标识了RCA技术的许多属性,这些属性有助于选择适当的...

    如何在VS2010中使用ROOT

    首先,ROOT是欧洲核子研究组织(CERN)开发的一个大型软件框架,广泛应用于粒子物理学领域,用于数据分析、存储以及大规模数值计算。它主要使用C++编写,并且还包含了一个CINT C++解释器,以及用于图形显示和可视化...

Global site tag (gtag.js) - Google Analytics