应用程序连接数据库报错 errorCode 17002, state 08006、IO Error: Connection reset

这篇博客记录了一次由于DNS配置错误导致的数据库连接异常问题。在华为arm架构的CentOS7.6服务器上,应用使用tomcat-8.35和jdk-1.8.261,连接mysql5.7和oracle11.2.0.1.0数据库时出现SQLRecoverableException。经过排查,包括检查数据库、应用服务器配置和linux熵池,最终发现是无效DNS导致的连接重置。解决办法是注释掉/etc/resolv.conf中无法访问的DNS,确保DNS解析正常,从而修复了问题。建议在应用服务器的hosts文件中配置数据库服务器的IP和主机名映射,以避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误摘要:

1、create connection SQLException, url: jdbc:oracle:thin:**/***@*****:1521/orcl, errorCode 17002, state 08006

2、java.sql.SQLRecoverableException: IO Error: Connection reset

3、Caused by: java.net.SocketException: Connection reset

环境

       服务器:华为arm架构

       操作系统: centos7.6

       中间件:tomcat-8.35、jdk-1.8.261

       数据库:mysql5.7、oracle 11.2.0.1.0

错误日志

 排查步骤一:排查数据库

sqldeveloper连接数据库正常

应用服务器到数据库服务器的网

络及端口 正常

数据库状态  正常

数据库会话上限   正常

数据库日志   正常

数据库监听日志文件  正常

系统资源   正常

以上证明数据库一切正常

排查步骤二-排查应用服务器

服务器防火墙,selinux、端口等都正常,

排查步骤三-linux熵池

后来在网上查了和我的情况一模一样的这个报错,好多人都说是linux熵池不够的问题(具体的熵池是啥感兴趣的可以自己去了解一下)然后满心欢喜的按照思路安装了rng-tools工具增加系统熵池,安装好后熵池确实增加了,但系统报错依旧。可见并没什么用。

最终解决方案

后来困惑3天之后突然想起服务器是华为的云主机,想到是不是网络方面有点问题(因为之前偶尔是能正常连接数据库,且各机器间相互通讯是没问题的,就没考虑到是网络问题),于是开始一步步排查问题,最后排查到dns时候,看见/etc/resolv.conf文件下配置了几个dns

拿出来ping了一下   好家伙  一个不通,初步证明应该是这几个不能使用的dns在捣乱,注释掉之后重启部署的应用服务,果然正常了

后续:数据库服务器上的监听如果是监听的主机名,最好在应用服务器的hosts文件将ip和主机名映射关系写上,否则也有可能连接不上数据库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜灬狼丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值