JAVA-定位排查bug

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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、定位报错位置


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

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

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
4天前
|
监控 安全 Java
Java多线程调试技巧:如何定位和解决线程安全问题
【4月更文挑战第6天】本文探讨了Java并发编程中的线程安全问题,包括数据不一致、死锁和性能下降。为解决这些问题,文章介绍了理解线程安全的重要性,如互斥、同步和避免死锁,并提供了识别问题的迹象和调试工具,如JConsole、VisualVM、堆栈跟踪和Thread Dump分析。此外,还建议使用原子类、线程安全数据结构和静态代码分析工具来加强同步和减少锁粒度。最后,强调了避免共享状态和合理设计的重要性,以确保多线程程序的正确性和效率。
|
4天前
|
监控 安全 Java
【JAVA】uwb工厂人员定位系统:人员轨迹实时定位
Uwb人员精准定位系统需要具备实时性,将定位数据及时反馈给用户,方便用户进行人员管理和监控。
65 4
|
4天前
|
JavaScript 前端开发 数据可视化
JAVA人员定位系统源码,Java高精度定位系统源码
1、对各个地图以及各个区域内的人员信息快速查看,以图表的形式展示,更加清晰。 2、主要包括人员动态数据、各类告警事件、员工巡检状态等。
42 3
|
4天前
|
SQL 网络协议 Java
Java开发者的必备技能:抓包工具排查问题
Java开发者的必备技能:抓包工具排查问题
103 0
|
4天前
|
JavaScript 前端开发 安全
【java】工业园区高精准UWB定位系统源码
巡检管理: 1、可查看巡检人员执行任务的轨迹,全面记录巡检时间、地点、耗时、作业顺序等。 2、结合小程序,使巡检人员执行任务更加方便,一键下发和接收巡检任务。 定位系统技术架构:开发语言:JAVA   开发工具:idea 、VS Code   数 据 库:MYSQL  前端框架:Vue   后端框架:Spring boot  技术架构:单体服务 + 硬件(UWB定位基站、卡牌)
46 1
|
4天前
|
监控 安全 数据可视化
【Java】UWB高精度工业人员安全定位系统源码
【Java】UWB高精度工业人员安全定位系统源码
81 0
|
4天前
|
缓存 算法 安全
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(二)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
23 0
|
4天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
92 0
|
2天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
12 2