JDBC连接Oracle异常-Connection Reset By Peer

场景描述

在生产环境通过JDBC连接oracle数据库,80%的几率会出现以下异常:

JDBC SSL Connection Fails With SEVERE: IO Error: Connection Reset By Peer, Connect Lapse 1 Ms., Authentication Lapse 0 Ms. (Doc ID 2747530.1)

The Network Adapter could not establish the connection

是有时候没问题,有时候有问题。

服务器配置:

ARM 架构服务器,麒麟操作系统。

解决

根据 Connection Reset By Peer, Connect Lapse 1 Ms., Authentication Lapse 0 Ms搜索的各种解决方法,都没有办法解决。

以下是无效参考:

https://www.technewstoday.com/connection-reset-by-peer/

https://support.oracle.com/knowledge/Middleware/2747530_1.html#FIX

https://docs.oracle.com/cd/E13209_01/wlcp/wlss30/configwlss/jvmrand.html

排除法

对linux不深入,oracle不深入实在是没有办法了,在测试环境(x86),经过多次测试,没有出现任何问题。排除是代码的问题。

初步可能:

1、服务架构问题,X86与ARM差异

2、Oracle服务器问题

3、OJDBC版本问题

4、网络偶尔连接得上,偶尔连接不上。可能是网络的连接问题。

排查:

2、其他客户端连接oracle,没有出现异常,排除oracle服务器问题。

3、相同配置,连接都没有问题,排除。

4、网络问题

搜素The Network Adapter could not establish the connection ,找到https://blog.csdn.net/jycjyc/article/details/118196814 ,分析挺有可能。修改配置,没有再出现问题。

参考:https://www.cnblogs.com/leafarmyarmy/p/12262907.html

解决方法

在 IPv4/IPv6 双环境中,对于使用 Java 开发的网络应用,比较值得注意的是以下两个 IPv6 相关的 Java 虚拟机系统属性。

java.net.preferIPv4Stack= 
java.net.preferIPv6Addresses=

preferIPv4Stack(默 认 false)表示如果存在 IPv4 和 IPv6 双栈,Java 程序是否优先使用 IPv4 套接字。默认值是优先使用 IPv6 套接字,因为 IPv6 套接字可以与对应的 IPv4 或 IPv6 主机进行对话;相反如果优先使用 IPv4,则只不能与 IPv6 主机进行通信。

preferIPv6Addresses(默认 false)表示在查询本地或远端 IP 地址时,如果存在 IPv4 和 IPv6 双地址,Java 程序是否优先返回 IPv6 地址。Java 默认返回 IPv4 地址主要是为了向后兼容,以支持旧有的 IPv4 验证逻辑,以及旧有的仅支持 IPv4 地址的服务。

JVM增加参数: -Djava.net.preferIPv4Stack=true

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/bb0e13e6ef.html