Java 服务异常排查定位大图
引言
研发工程师日常的工作除了开发实现新需求之外,排查定位问题也是重要的组成部分。如果在发生线上故障的时能够快速定位线上 bug 并且修复 bug,不仅是研发工程师技术能力的重要体现,同时也可以帮助线上及时止血避免平台故障进一步蔓延,从而导致影响用户体验或者产生不可挽回的资损。但是实际上很多研发工程师由于工作经验还不充足,导致经常在遇到问题的时候不知所措,不知道该如何分析排查定位问题。因此本文主要聚焦日常工作中经常遇到的异常场景,梳理了问题排查定位的思路大图,这样大家在实际项目中如果遇到类似的异常场景,可以按照思路大图进行问题排查定位解决,相信大家掌握了故障定位的分析套路之后就可以做到遇到问题时临危不乱。
Java 服务异常
系统资源问题定位
系统资源问题定位的核心是找到到底是哪个进程在异常占用系统资源,特别是在服务器中混部了多种服务的时候,经常会遇到系统资源竞用的情况。因此需要确定异常进程的 pid,然后再继续分析异常服务中到到底是哪个工作线程出现异常,如果并不是代码问题导致的,那么则需要考虑增加硬件配置来承载混部的各个服务。
JVM 内存溢出问题定位
JVM 内存溢出的问题应该是每个研发工程师都会遇到的问题,主要大概就是 JVM 参数设置不合理、代码 Bug 等几方面的原因。其中代码 Bug 为主要原因,因此在我们实际写代码的过程中就需要考量内存占用的问题,特别是对于一些递归操作、服务内一次缓存大量数据、在 for 循环中查询数据等都要特别注意或者避免。
接口响应慢问题定位
服务接口响应慢的问题大概是这三种异常场景中最复杂的,主要可以从两个层面进行分析,一个是服务自身存在问题导致接口响应慢,另一个是服务的依赖方出现响应慢导致。因此分析排查定位过程也是主要从这两方面出发,服务自身问题主要包括代码 Bug、系统资源异常使用等,依赖方主要包括依赖的中间件、下游服务接口等。
总结
本文主要梳理了日常研发工作中最常见的三种异常场景,分别是服务器资源使用异常、Java 服务内存溢出异常以及接口响应超时异常。同时结合实际的经验提炼了各个异常情况下的问题根因分析思路以及排查定位大图,大家在遇到类似问题的时候可以参考大图中的思路进行问题排查定位以及解决。
版权声明: 本文为 InfoQ 作者【慕枫技术笔记】的原创文章。
原文链接:【http://xie.infoq.cn/article/73377788bf25d67c13cc0b2f5】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论