JDBC соединение висит - PullRequest
       20

JDBC соединение висит

5 голосов
/ 08 августа 2009

У одного из наших клиентов появилась новая проблема: приложение останавливается. Дамп потока показывает, что все потоки зависают на сетевом вводе-выводе в вызовах JDBC.

Мы / я никогда не видели этих «сетевых IO» зависаний. Обычно проблемы с медленной машиной и БД имеют либо: а) один или два длительных запроса, либо б) блокировку / взаимоблокировку определенного типа. В любом из этих случаев потоки «зависают» на разных методах. Я никогда не видел, чтобы все 30+ потоков висели в сети IO.

Ниже я включил выдержку из дампа потока. Все HTTP-потоки зависают при одном и том же вызове java.net.SocketInputStream.read.

Я говорил с их дба и сисадмином. По их словам, в последнее время в окружающей среде «ничего не изменилось», что могло бы вызвать эту проблему.

дБ среды

MSSQL 2005, 64-битный пакет обновления 2 Драйвер: sqljdbc.jar: 1.0 809 102

Примечание: они работают с более старым драйвером jdbc. AFAIK они пытались обновить драйвер с версии 1.0 до версии 1.2, но у них была другая проблема.

другие проблемы окружающей среды

Они работают как на сервере приложений, так и на сервере базы данных в виртуальных машинах VMWare. Я не знаю, как эта настройка влияет на производительность сети.

Видимо, это единственное приложение с этой проблемой. Я больше ничего не знаю об их сетевой архитектуре.

Вопросы * какие-либо идеи по этой проблеме? * если это сеть, какие дальнейшие шаги для анализа?

Приложение A: Выдержка из дампа темы

Все HTTP-соединения зависают одним и тем же способом:

"TP-Processor31" daemon prio=5 tid=0x04085b78 nid=0x970 runnable [0x0764d000..0x0764fd6c]
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at com.microsoft.sqlserver.jdbc.DBComms.receive(Unknown Source)
    at com.microsoft.sqlserver.jdbc.IOBuffer.sendCommand(Unknown Source)
    - locked  (a com.microsoft.sqlserver.jdbc.DBComms)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source)

Ответы [ 2 ]

8 голосов
/ 02 ноября 2011

У нас были похожие проблемы, и мы проследили их до глючного обновления JDK (1.6.29).

Мы скачали 1.6.27 (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u27-oth-JPR), переустановили среду JAVA_HOME, и мы вернулись на путь.

2 голосов
/ 03 ноября 2011

Это изменения в JSSE в версии 1.6 u29. Изменение должно частично исправлять CVE-2011-3389 и CVE-2011-3560 .

Если вы не развертываете апплеты и не используете java web-start. Вы могли бы просто использовать 1.6 u27 jsse.jar. У вас все еще будет уязвимость, но она позволит работать sqljdbc.jar и sqljdbc4.jar.

Другие варианты перехода на Java 7, sqljdbc4.jar, действительно работают в этой среде.

Патч не является полным исправлением. Так что ожидайте больше изменений в будущих патчах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...