java - Linux 服务器中的 "java.sql.SQLException: I/O Error: Connection reset"

标签 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)

我该如何解决这个问题?

最佳答案

答案取自 oracle 论坛,here :

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

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

问题有两个:

  1. SecureRandom.nextBytes(byte[]) 被调用。如果文件数量很大 方法需要很长时间 响应并因此导致服务器超时

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

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

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

中读取

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

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

关于java - Linux 服务器中的 "java.sql.SQLException: I/O Error: Connection reset",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43777075/

相关文章:

java - 如何在 log4j.properties 文件中共享 appenders 属性?

java - 将 jar 部署到 unix 服务器

java - 使用 if 语句过滤 Java 中任意字段组合的列表

java - Spring Data JPA 获取具有连接表的实体的方法

java - 通过拆分和运行将 ListenableFuture<Iterable<A>> 转换为 Iterable<ListenableFuture<B>>

mysql - SSH 隧道 : local => gateway => MySQL server

linux - 在 CentOS 上编译 Cilkplus-GCC

oracle - 如何确定 PL/SQL 语句中的行/值抛出错误?

SQL 查询在破折号之前显示字符串

java - SQL 错误 17268 : Year out of range (Java/Spring)