linux服务器

时间:2017-05-04 07:57:54

标签: java linux oracle

我有一个连接到oracle数据库的java程序,有时它工作,有时会显示这个错误信息:

线程“main”中的异常java.sql.SQLRecoverableException:IO错误:连接重置

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)

我如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

来自oracle论坛的答案here

java.security.SecureRandom是sun提供的标准API。在此类void nextBytes(byte[])提供的各种方法中。

此方法用于生成随机字节。 Oracle 11g JDBC驱动程序使用此API在期间生成随机数 登录。使用Linux的用户遇到SQLException("Io exception: Connection reset")

问题有两个:

  1. JVM尝试列出/ tmp(或-Djava.io.tmpdir设置的备用tmp目录)中的所有文件 调用SecureRandom.nextBytes(byte[])。如果文件数量很大的话 方法需要很长时间 响应并因此导致服务器超时

  2. 方法void nextBytes(byte[])在Linux和缺少随机的一些机器上使用/ dev / random 数字生成硬件操作减慢到整个登录过程的程度 停了下来。最终用户遇到SQLException(&#34; Io异常: 连接重置&#34;)

  3. 如果底层操作系统是在故障硬件上运行的Linux,则升级到11g的用户可能会遇到此问题。

    其原因尚未确切确定。它可能是硬件问题或事实 由于某种原因,该软件无法从dev/random

    读取

    解决方案似乎将此设置添加到jvm

    -Djava.security.egd=file:/dev/./urandom
    

答案 1 :(得分:-1)

当应用程序与数据库之间的连接断开连接时,通常会发生连接重置,例如网络问题或所需的资源。

检查以下帖子,它应该让您知道要检查的内容。 SQLRecoverableException: I/O Exception: Connection reset