如何从消失的异常堆栈定位线上问题

news/2024/11/29 7:37:45/

一、消失的异常堆栈

如何快速定位问题?想必大家心中都有自己的答案,当然最简单直接的办法还是查找异常堆栈信息。

然而有时异常堆栈并不完整,只有一句描述,如下:

Caused by: java.lang.NullPointerException

造成这种现象的原因其实很简单,原因如下:

JIT编译器对异常进行了优化,当代码中的某个位置抛出同一个异常很多次后,
JIT服务端编译器(C2)会将其优化成抛出一个事先编译好的、类型匹配的异常,异常堆栈信息就看不到了。

二、Fast Throw

Fast Throw,字段上理解就是快速抛异常,目前需要满足以下条件才有如此的优化:

•只针对HotSpot VM才有, 例如oracleJDK, libericaJDK等

•特定位置抛出很多次,其实就是JIT将它优化了

•JIT必须使用C2才会这样优化,不抛出原来的异常,改用fast throw抛出

•这是一个事先分配好的异常,message和堆栈都是空的

可以看出,如果某个异常在同一位置被抛出多次,会被JIT C2优化成空异常,例如本文的NullPointerException,既没有message,也没有堆栈.但他的速度非常快,不用分配内存和获取堆栈.

如果想关闭这个优化,设置-XX:-OmitStackTraceInFastThrow即可。

存在即合理,既然存在fast throw的优化,必然有其价值。fast throw优化的原因是为了提高性能。当同一种异常在相同的位置被抛出多次,编译器就会重新编译此方法。重编译后,编译器可能会使用不提供跟踪的预分配异常来选择更快的策略。

本地测试了一下抛出NullPointerException,在开启与关闭fast throw的性能。

执行次数开启Fast Throw关闭Fast Throw
10w996ms3525ms
100w5983ms28345ms
500w35678ms——

言而简之,不能因此出现了消失的异常堆栈就尝试关闭fast throw优化功能。

三、问题原因定位

对于线上环境中触发了Fast Throw机制,则可以通过向前追溯相同的日志来定位问题。

如在开门红中,有个接口的可用率调到98.3%(不是100%),如下图。

然后搜索日志发现大量的Caused by: java.lang.NullPointerException,没有详细的异常堆栈,很显然是由于fast throw导致的,然后不断向前追溯相同的日志来定位问题如下图。

出现问题的原因找到了,接着就分析原因。原因很简单,由于某一台机器性能波动导致接口超时将兜底对象缓存,后续逻辑在处理的过种中对象中的Boolean属性值在转boolean时出现NPE,问题根源还是代码兼容性不足够好。



 

这这台机器进行系统视图层分析,发现TCP重传数较高,如下左图。





四、问题原因分析

TCP重传主要是为了保证数据传输的可靠性,TCP是一种保证可靠传输的机制,如重传与确认机制、数据校验、数据分片、流量控制、拥塞控制等。TCP重传的类型有超时重传和快速重传。超时重传是在请求包发送出去时开启计时器,当到达时间之后,没有收到ACK,则进行重传直到达到上限次数或者收到ACK。快速重传则依赖于数据包的期望序列号,并进行一致性检查。

•多台机器或者同一机房同时TCP重传

很大原因是网络抖动

•单机或者某个应用出现TCP重传

一般是由于链路的服务器或端口无法访问,对于虚拟机或者docker,还需要考虑宿主机的问题。

通过系统级分析,最后确定是由于宿主机连接性问题导致docker实例TCP重传增高,当然最重要的是补充相关的指标监控。

 总之,在遇到问题时,要从根源上分析问题。












http://www.ppmy.cn/news/220381.html

相关文章

第17节:cesium 图元聚合基础教程(含源码+视频)

相关代码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><vc-layer-imagery><vc-pr

解决苹果手机给windows笔记本电脑开热点电脑连接不上热点的问题

过年这几天在家用笔记本电脑办公&#xff0c;由于条件限制只能使用手机给电脑上网的方式。以前用苹果手机给windows笔记本开热点一直都能连接上&#xff0c;但是今年没有连接上&#xff0c;虽然电脑可以连接上&#xff0c;但是立马就断开了&#xff0c;时断时续&#xff0c;很是…

苹果笔记本电脑安装Windows系统的教程!

目录 步骤一&#xff1a;下载64位Windows10文件包&#xff08;三选一 , 任君选择&#xff09;推荐下载链接1: [https://windows.xnayw.cn/win1064.html ](https://windows.xnayw.cn/win1064.html)推荐下载链接2: [https://www.xitongzhijia.net](https://www.xitongzhijia.net)…

苹果M1芯片笔记本电脑SIP系统完整性保护无法关闭成功

环境&#xff1a; MacBook Pro 13.3 八核M18G/256G 2020款 Mac os 11.7.1 问题描述&#xff1a; 系统完整性保护 SIP(System Integrity Protection&#xff0c;有时被称作rootless [2-3] &#xff0c;中文名为系统完整性保护) 是苹果公司的macOS系统中一个安全功能&#x…

苹果Mac笔记本电脑如何开启热点分享网络?

苹果除了在iPhone 上有设计热点分享的功能之外&#xff0c;其实Mac 笔记本电脑很早就已经可以开启类似热点分享网络的功能了&#xff0c;在没有Wi-Fi 只提供有线网路的地方相当好用&#xff0c;来看看要在苹果Mac上如何开启热点分享网路的功能吧&#xff01; 苹果Mac 开启热点…

青少年C++编程等考有这么多??机构到底该带孩子考哪个?

随着信息学的普及与发展&#xff0c;越来越多的孩子开始学习C&#xff0c;参加编程等考来检验C的学习成果、作为也逐渐成为了一个共识&#xff0c;跟C有关的等考究竟有哪些&#xff0c;哪个等考含金量够高&#xff0c;能够客观、有效地检验学习成果呢&#xff1f; 在这里整理了…

Zookeeper是什么,它有什么特性与使用场景?

ZooKeeper 是一种开源的分布式协调服务&#xff0c;由雅虎公司开发。它可以帮助分布式应用程序实现数据同步、配置管理、命名服务等功能&#xff0c;并具有高可用性、可靠性和可扩展性等特性。本文将对 ZooKeeper 的定义、特性和使用场景进行详细介绍。 什么是 ZooKeeper&…

CloudQuery一体化数据库SQL操作安全管控平台

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; CloudQuery一体化数据库SQL操作安全管控平台 导读 CloudQuery作为业界领先的面向企业的数据库安全解决方案&#xff0c;CloudQuery致力于打造一站式安全可靠的数据操…