JDBC client hangs on socketRead()

Поиск
Список
Период
Сортировка
От Michał Niklas
Тема JDBC client hangs on socketRead()
Дата
Msg-id c4695c6f-e9e1-e089-3499-b1a5e7bf112c@heuthes.pl
обсуждение исходный текст
Ответы Re: JDBC client hangs on socketRead()
Список pgsql-jdbc
I have multithread Java service using JDBC connections from pool and
sometimes it hangs some threads at socketRead() while PostgreSQL shows
that all connections are in idle state.

My internal logging shows that the last statement I called in those
threads was:

    ResultSet rs = stmt.executeQuery();

From my client jstack output looks like:

"/client1_160524084431" #65702 daemon prio=5 os_prio=0
tid=0x00007fc2fc016800 nid=0x10c9 runnable [0x00007fc297ffd000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:170)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at
org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:143)
    at
org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:112)
    at
org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:70)
    at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:283)
    at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1799)
    at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200)
    - locked <0x00000005dea42868> (a org.postgresql.core.v3.QueryExecutorImpl)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424)
    at
org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161)
    at
org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114)
    ...

"/client2_160524084407" #65374 daemon prio=5 os_prio=0
tid=0x00007fc2fc0e8800 nid=0xf81 runnable [0x00007fc2adbfc000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:170)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at
org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:143)
    at
org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:112)
    at
org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:70)
    at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:283)
    at
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1799)
    at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200)
    - locked <0x00000005df264838> (a org.postgresql.core.v3.QueryExecutorImpl)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424)
    at
org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161)
    at
org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114)
    ...

(more similar threads, all trying to socketRead())
...

At server side those connections show idle state:

polkitd    736  0.0  0.0 8512128 30464 ?       Ss   07:59   0:00
postgres: postgres client1 192.168.1.124(47685) idle
polkitd    857  0.0  0.0 8509548 20824 ?       Ss   08:02   0:00
postgres: postgres client2 192.168.1.124(47809) idle
...
(more similar connections)

My environment:

Client:
OS: Linux
JVM: 1.8.0_92 (Oracle Corporation)
JDBC: postgresql-9.4.1208.jar, Java JDBC 4.2 (JRE 8+) driver for
PostgreSQL database

Server:
Version: PostgreSQL 9.5.3 on x86_64-pc-linux-gnu, compiled by gcc
(Debian 4.9.2-10) 4.9.2, 64-bit
OS: Linux

Both service and database server runs on separate docker environments.


My question is:
Why I observe such hanging threads?

--
Regards,
Michał Niklas




Вложения

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

Предыдущее
От: Jeremy Whiting
Дата:
Сообщение: Roadmap: JDK 9 testing.
Следующее
От: Dave Cramer
Дата:
Сообщение: Re: JDBC client hangs on socketRead()