У одного из наших клиентов есть довольно новая проблема: приложение стачивается для остановки. Дамп потока показывает, что все потоки зависают в сети IO в вызовах JDBC.
We/I никогда не видели их, 'сеть IO' зависает. Обычно медленная машина w/проблемы DB имеет или a) один или два продолжительных запроса или b) некоторый тип блокировки/мертвой блокировки. В любом из этих случаев потоки 'зависают' на различных методах. Я никогда не видел все 30 + потоки, зависающие в сети IO.
Ниже я включал выборку от дампа потока. Все потоки HTTP зависают на том же java.net.SocketInputStream.read
звонить.
Я говорил с их dba и системным администратором. Согласно им 'ничто недавно не изменилось' в среде, которая вызвала бы эту проблему.
среда дб
MSSQL 64-разрядный Пакет обновления 2005 года 2 Драйвера: sqljdbc.jar: 1.0 809 102
Примечание: они выполняют более старый jdbc драйвер. AFAIK они пытались обновить с 1,0 на 1,2 драйвера, но имели некоторую другую проблему.
другие проблемы среды
Они выполняют и сервер приложений и сервер дб в VM's 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)