Re: Hung JDBC connections

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Mike Charnoky <noky(at)nextbus(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Hung JDBC connections
Date: 2012-06-08 18:18:32
Message-ID: CADK3HH+QHnKteriHjmt36DakpwrWeUZBWcLeWgES6g8uGB0yLw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Mike,

The latest version of the driver does have setTimeout implemented.

Curious who's java implementation are you using ?

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca

On Fri, Jun 8, 2012 at 10:20 AM, Mike Charnoky <noky(at)nextbus(dot)com> wrote:
> 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
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Mike Charnoky 2012-06-08 18:57:19 Re: Hung JDBC connections
Previous Message Maciek Sakrejda 2012-06-08 16:52:48 Re: get/setReadOnly broken if default_transaction_read_only on