У одного из наших клиентов новая проблема: приложение зависает. Дамп потока показывает, что все потоки зависают на сетевом вводе-выводе в вызовах JDBC.
Мы / я никогда не видели этих зависаний «сетевого ввода-вывода». Обычно медленная машина с проблемами с БД имеет либо а) один или два длительных запроса, либо б) какой-то тип блокировки/взаимоблокировки. В любом из этих случаев потоки «зависают» на разных методах. Я никогда не видел, чтобы все 30+ потоков висели на сетевом вводе-выводе.
Ниже я включил выдержку из дампа потока. Все потоки HTTP зависают на одном вызове java.net.SocketInputStream.read.
Я разговаривал с их администратором баз данных и системным администратором. По их словам, в последнее время в окружающей среде «ничего не изменилось», что могло бы вызвать эту проблему.
среда БД
MSSQL 2005 64-разрядный пакет обновления 2 Драйвер: sqljdbc.jar: 1.0 809 102
Примечание: они используют более старый драйвер jdbc. Насколько я знаю, они пытались обновить драйвер с версии 1.0 до версии 1.2, но столкнулись с другой проблемой.
другие проблемы со средой
Они используют как сервер приложений, так и сервер базы данных в виртуальных машинах VMWare. Я не знаю, как эта настройка влияет на производительность сети.
Судя по всему это единственное приложение с такой проблемой. Я больше ничего не знаю об их сетевой архитектуре.
Вопросы * есть идеи по этой проблеме? * если это сеть, какие дальнейшие шаги для анализа?
Приложение А. Выдержка из дампа темы
Все 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)