linux - oracle 瘦 jdbc 连接在不活动后接收 "connection reset"

标签 linux oracle tomcat jdbc connection-pooling

我有一个新的 tomcat 应用服务器运行在 tomcat 6、java 6 (openjdk)、centos 6.2 上。服务器是在centos 6.2主机上运行在qemu-kvm下的虚拟机。主机和 guest 都是 64 位的。

我有一个连接打开的情况,(从连接池)然后“长时间计算”发生大约 4 小时,在此期间不使用连接。最后发出“commit”,服务器给出“connection reset”异常,具体为:

Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:185)
    at oracle.net.ns.Packet.receive(Packet.java:282)
    at oracle.net.ns.DataPacket.receive(DataPacket.java:103)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:230)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:122)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:78)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
    at oracle.jdbc.driver.T4C7Ocommoncall.doOCOMMIT(T4C7Ocommoncall.java:75)
    at oracle.jdbc.driver.T4CConnection.doCommit(T4CConnection.java:558)

数据库服务器和客户端在同一个子网中,除了服务器是一个真实的物理主机,显然应用服务器是运行在同一个子网中的物理机器中的 guest 。

主机使用“桥接”网络。

这可能根本不是软件问题,而是 linux 操作系统配置(iptables?)问题,但我真的不知道。

最佳答案

我已经遇到过几次了。几乎总是由网络超时(负载平衡器或防火墙)引起。但是你已经明确提到你的服务器在同一个子网上,所以不太确定发生了什么。既然你怀疑 iptables,你能不能把它关掉,运行测试看看它是否有效(太简单了哈:)

无论如何,假设您正在连接到 Oracle 数据库,以下调整会有所帮助

http://raibledesigns.com/rd/entry/tomcat_oracle_connectivity_problems

如果您使用不同的数据库(比如 mysql),设置可能不同,但逻辑是相同的。设置一个 keepalive 值以防止连接空闲时间过长。这样防火墙/负载平衡器/iptables 软件就不会终止它。

关于linux - oracle 瘦 jdbc 连接在不活动后接收 "connection reset",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202813/

相关文章:

c - 制作一个/dev/hwrng 内核模块,它使用光标位置来生成熵

linux - 将整个文件夹复制到 SFTP 服务器

sql - 选择日期小于今天的行

sql - 包含 View 的模式可视化工具(适用于 Oracle)

java - 真的是内存泄漏吗?

linux - bash 中的 If then elif then else 语句

linux - 提取包含特定单词的多个字段

Oracle 左外连接索引

mysql - org.hibernate.AssertionFailure : null id in [domain object] entry

java - 如何在不解包的情况下更改 war 中 web-inf/classes 目录中的文件?