У меня есть новый сервер приложений tomcat, работающий на tomcat 6, java 6 (openjdk), centos 6.2. Сервер представляет собой виртуальную машину, работающую под qemu-kvm на хосте centos 6.2. Хост и гость являются 64-битными.
У меня есть случай, когда соединение открывается (из пула соединений), после чего происходит "длительное вычисление" в течение примерно 4 часов, в течение которого соединение не используется. Наконец, выдается «commit», и сервер выдает исключение «сброс соединения», а именно:
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 (iptables?), Но я действительно не знаю.