JAVA-定位排查bug

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: JAVA-定位排查bug

在开发过程中难免会遇到bug,理解bug的含义,定位bug的位置,对于解决bug至关重要!掌握高效的排错技巧,对于程序员来说必不可少。

目录

一、错误异常的分类

二、常见报错信息及原因(持续更新中)
目录

一、错误异常的分类

二、常见报错信息及原因(持续更新中)

1、空指针异常(java.lang.NullpointerException)

2、数组下标越界异常(java.lang.IndexOutOfBoundsException)
3、访问权限(java.lang.IllegalAccessException)

4、OOM内存不足(java.lang.OutOfMemoryException)

三、排错的思路

1、查看报错信息

2、定位报错位置

一、错误异常的分类

Throwable类的两个子类:

(1)Exception:出现的问题是可以被捕获的

(2)Error:系统错误, Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态,通常由JVM进行处理,与我们执行的操作无关

二、常见报错信息及原因(持续更新中)

1、空指针异常(java.lang.NullpointerException)

原因:当应用程序试图在需要对象的地方使用null时,抛出该异常。经常出现在创建对象,调用数组这些代码中。包括:调用 null 对象的实例方法。

访问或修改 null 对象的字段。

将 null 作为一个数组,获得其长度。

将 null 作为一个数组,访问或修改其时间片。

将 null 作为 Throwable 值抛出。

2、数组下标越界异常(java.lang.IndexOutOfBoundsException

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at ArrayTest.main(ArrayTest.java:4)

报错信息中可以明显看到“ArrayIndexOutOfBoundsException”。我们需要查看程序中调用的数组或者字符串的下标值是不是超出了数组的范围

3、访问权限(java.lang.IllegalAccessException)


当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这异常。

一种情况是使用了package,方法不在同一个包下。

另一种情况是,方法的访问修饰符为private。

4、OOM内存不足(java.lang.OutOfMemoryException)

当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误

原因

1、系统里缓存了大量的数据,没有及时释放。应该控制缓存的数据大小,缓存失效的时间

2、本地资源泄漏

三、排错的思路

拿一个例子举例说明

环境: SpringCloud 框架,使用nacos服务注册中心,配置了德鲁伊数据池管理。

2023-01-30 11:10:05.204 ERROR [prosper-order,,,] 27512 --- [           main] com.alibaba.druid.pool.DruidDataSource   : init datasource error, url: jdbc:mysql://jyz.coolpanda.tech:3306/prosper_dev?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73) ~[mysql-connector-java-8.0.16.jar:8.0.16]
    at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:905) ~[mysql-connector-java-8.0.16.jar:8.0.16]

1、查看报错信息

报错信息很宝贵,也很明确

A. 上面的例子中,可以看出**ERROR**后面有绿色提示    "com.alibaba.druid.pool.DruidDataSource"
明显看出是DruidDataSource的问题。

B.再往后看具体的报错信息"init datasource error"

2、定位报错位置


定位到具体报错信息,说不能创建数据库连接,超时,放弃。

那我们思考,哪里进行了数据库连接配置,配置是否正确,再去排查。

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
Java 数据库连接
Java中的内存泄漏排查与预防方法
Java中的内存泄漏排查与预防方法
|
3月前
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到内存不足时会抛出OutOfMemoryError(OOM)异常。常见OOM情况包括:1) **Java堆空间不足**:大量对象未被及时回收或内存泄漏;2) **线程栈空间不足**:递归过深或大量线程创建;3) **方法区溢出**:类信息过多,如CGLib代理类生成过多;4) **本机内存不足**:JNI调用消耗大量内存;5) **GC造成的内存不足**:频繁GC但效果不佳。解决方法包括调整JVM参数(如-Xmx、-Xss)、优化代码及使用高效垃圾回收器。
146 15
常见java OOM异常分析排查思路分析
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
149 7
使用Java和XPath在XML文档中精准定位数据
|
3天前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
4月前
|
Java Maven 容器
java依赖冲突解决问题之ClassNotFoundException定位确认异常如何解决
java依赖冲突解决问题之ClassNotFoundException定位确认异常如何解决
|
5月前
|
监控 Java
Java中的内存泄漏分析与排查技巧
Java中的内存泄漏分析与排查技巧
|
2月前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
110 0
Java面试题之cpu占用率100%,进行定位和解决
|
2月前
|
存储 Java
深入理解java对象的访问定位
这篇文章深入探讨了Java对象的访问定位机制,比较了使用句柄和直接指针两种主流的对象访问方式,并指出了它们各自的优势,例如句柄访问在对象移动时的稳定性和直接指针访问的速度优势。
34 0
深入理解java对象的访问定位
|
3月前
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到 OutOfMemoryError(OOM)表示内存资源不足。常见OOM情况包括:1) **Java堆空间不足**:内存被大量对象占用且未及时回收,或内存泄漏;解决方法包括调整JVM堆内存大小、优化代码及修复内存泄漏。2) **线程栈空间不足**:单线程栈帧过大或频繁创建线程;可通过优化代码或调整-Xss参数解决。3) **方法区溢出**:运行时生成大量类导致方法区满载;需调整元空间大小或优化类加载机制。4) **本机内存不足**:JNI调用或内存泄漏引起;需检查并优化本机代码。5) **GC造成的内存不足**:频繁GC但效果不佳;需优化JVM参数、代码及垃圾回收器
常见java OOM异常分析排查思路分析
|
4月前
|
小程序 JavaScript Java
【Java】服务CPU占用率100%,教你用jstack排查定位
本文详细讲解如何使用jstack排查定位CPU高占用问题。首先介绍jstack的基本概念:它是诊断Java应用程序线程问题的工具,能生成线程堆栈快照,帮助找出程序中的瓶颈。接着,文章通过具体步骤演示如何使用`top`命令找到高CPU占用的Java进程及线程,再结合`jstack`命令获取堆栈信息并进行分析,最终定位问题代码。
336 1
【Java】服务CPU占用率100%,教你用jstack排查定位