错误摘要:

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和主机名映射关系写上,否则也有可能连接不上数据库

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐