Hung JDBC connections

Поиск
Список
Период
Сортировка
От Mike Charnoky
Тема Hung JDBC connections
Дата
Msg-id 4FD20A3F.70602@nextbus.com
обсуждение исходный текст
Ответы Re: Hung JDBC connections
Re: Hung JDBC connections
Список pgsql-jdbc
Hi,

Yesterday we experienced a problem whereby hundreds of JDBC client
connections remained in a hung state, despite the fact that the
PostgreSQL server was actually rebooted. This is disconcerting because
our client applications have a db failover facility, but that feature
won't work unless existing JDBC connections (most of which are pooled)
fail in the first place. We had to instead manually restart all client
applications to eliminate all the hung connections.

Here are the details:
* server: PostgreSQL v8.3 on CentOS 5.4
* clients: JDBC v9.0-802.jdbc4, Java 1.6.0_30, on various CentOS 5.x
releases

The strange thing is that on the client side, according to "netstat" the
TCP connections between the JDBC clients and PostgreSQL were still in
the ESTABLISHED state (even though the server was rebooted). A thread
dump of the a typical hung client (one performing DB updates) looked
like this, it was stuck in a socket read. I was further surprised that
some test clients (which I did not restart yesterday) are STILL in this
hung state this morning, 18 hours after the incident!

"DBThrottle-" prio=10 tid=0xad1ff400 nid=0x24b8 runnable [0xad2ad000]
    java.lang.Thread.State: RUNNABLE
         at java.net.SocketInputStream.socketRead0(Native Method)
         at java.net.SocketInputStream.read(SocketInputStream.java:129)
         at
org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:145)
         at
org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:114)
         at
org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
         at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:274)
         at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1660)
         at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
         - locked <0xb243db20> (a org.postgresql.core.v3.QueryExecutorImpl)
         at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2725)
         at xxx.xxxxxxx.util.DBThrottle.sqlLoop(DBThrottle.java:401)
         at xxx.xxxxxxx.util.DBThrottle.access$000(DBThrottle.java:59)
         at xxx.xxxxxxx.util.DBThrottle$1.run(DBThrottle.java:199)

Is there a way this hang can be addressed by the JDBC driver? Again,
this is very disconcerting that the clients did not detect the server
failure. Does the connection use any sort of timeout mechanism? Thank
you for your help.


Mike


В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: get/setReadOnly broken if default_transaction_read_only on
Следующее
От: Maciek Sakrejda
Дата:
Сообщение: Re: get/setReadOnly broken if default_transaction_read_only on