我有一個運行在tomcat 6,java 6(openjdk),centos 6.2上的新的tomcat應用服務器。該服務器是在centos 6.2主機上運行在qemu-kvm下的虛擬機。主機和來賓都是64位的。oracle瘦jdbc連接在不活動後接收「連接重置」
我有一個連接打開的情況(從連接池),然後「長時間計算」發生了大約4個小時,在此期間不使用連接。最後,「提交」被髮出,並且服務器對「連接重置」的例外,具體如下:
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)
數據庫服務器和客戶端在同一個子網中,除了服務器是一個真正的物理主機,很明顯,應用程序服務器是在同一子網上的物理機器中運行的客戶機。
主機使用「橋接」網絡。
這可能不是軟件問題,而是linux os配置(iptables?)問題,但我真的不知道。
我相信這個問題是由做一個「system-config-firewall-tui」導致的,它間接刷新了iptables的配置和重新加載。這會導致一些現有連接死亡。 – dmansfield 2012-02-15 22:16:18