随机获取“IO错误:网络适配器无法建立连接”[重复]

Posted

技术标签:

【中文标题】随机获取“IO错误:网络适配器无法建立连接”[重复]【英文标题】:Getting "IO Error: The Network Adapter could not establish the connection" randomly [duplicate] 【发布时间】:2014-03-06 02:20:52 【问题描述】:

尝试通过 Java 连接到 Oracle 数据库时,我随机收到“IO 错误:网络适配器无法建立连接”。有时我必须运行我的应用程序几次才能停止抛出错误。

// initializes database connection
private static Connection initializeDatabaseConnection(Properties prop) 

    System.setProperty("oracle.net.tns_admin", prop.getProperty("tnsLocation"));

    try 
        Class.forName("oracle.jdbc.OracleDriver");
    
    catch (ClassNotFoundException ex)
    
        System.out.println(ex.getMessage());
    

    String dbURL = "jdbc:oracle:thin:@" + prop.getProperty("serviceName");
    String username = prop.getProperty("username");
    String password = prop.getProperty("password");

    Connection conn = null;

    try 
        conn = DriverManager.getConnection(dbURL, username, password);
    
    catch (SQLException ex)
    
        System.out.println("Error initializing database connection. " + ex.getMessage());
        System.exit(1);
    

    return conn;

关于它为什么随机抛出该错误的任何想法?我正在使用带有 ojdbc6.jar 驱动程序的 JDK 1.7。

【问题讨论】:

哦,是的,我正在使用 tnsnames.ora 文件。 听起来是网络问题 - 可能是路由器或类似的东西坏了。 【参考方案1】:

下载 PingPlotter 并打开它(让它运行 24 小时左右)。查看历史图表,您可能会发现 IP 地址下降或响应时间过长,同时您的应用程序无法连接到 Oracle。您没有逻辑错误,服务器严重超载,或者您与服务器之间出现严重拥塞。您是通过 *** 连接的吗?

http://www.pingplotter.com/

或者只是在连续模式下从命令行使用 ping 一个小时左右:

  ping -t <IP address or hostname>

Ping 绘图仪不经常 ping,但它会创建漂亮的图表。

如果您在远程工作,那么它可能是您的 ISP。否则,请与网络管理员或 DBA 联系。

显然,您无法在数据库连接不佳的情况下投入生产,因此希望您只是从您的开发环境中看到这个问题。尝试部署到您计划最终运行应用程序的机器上,看看它是否有所改进。

如果您无法改善它,我建议您增加 JDBC 驱动程序的初始登录超时时间。

Google JDBC 设置登录超时

这里是一个示例,虽然有几种方法可以解决,具体取决于您的驱动程序。

Connection timeout for DriverManager getConnection

【讨论】:

感谢您的帮助。我弄清楚了问题所在。在与我的同事交谈后,我被告知由于 RAC 的工作方式,这个问题很常见。我正在连接到 Oracle RAC 集群,并且在我要连接的服务名称下有三个主机。当我初始化我的连接时,负载平衡器会返回我将用于连接的数据库服务器的机器名称(而不是 IP 地址)。因此,当我的机器尝试解析服务器的机器名称时,它会失败。解决方法是在您的主机文件中放置一个条目。这样做之后,我的失败就停止了。 当然。我熟悉RAC。成功配置客户端计算机后,RAC 负载平衡对您的 JDBC 客户端应该是透明的(听起来就像您发现的那样)。您是否将所有 RAC 节点 (vips) 的条目放入主机文件中?。 是的,我必须将所有三台机器都放在我的 hosts 文件中。

以上是关于随机获取“IO错误:网络适配器无法建立连接”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

随机获取10个1-20之间的随机数,输出不重复的不能重复

获取随机颜色 [重复]

在指定数字范围内,随机获取n个不重复数字

如何从数组中获取随机元素[重复]

JAVA 获取一个四位随机数(并且四位数不重复),并说明原理和算法

获取随机数,且不重复.