2009-08-07 7 views
5

Uno de nuestros clientes tiene un problema nuevo: la aplicación se detiene. El volcado de subprocesos muestra que todos los subprocesos se cuelgan en la red IO en llamadas JDBC.Conexión JDBC colgando

We/I nunca he visto estos 'red IO' cuelga. Normalmente, una máquina lenta con problemas de DB tiene a) una o dos consultas de larga ejecución ob) algún tipo de bloqueo/interbloqueo. En cualquiera de estos casos, los hilos se "cuelgan" en diferentes métodos. Nunca he visto los más de 30 hilos colgados en la red IO.

A continuación he incluido un extracto del volcado de la hebra. Todos los hilos HTTP cuelgan en la misma llamada java.net.SocketInputStream.read.

Hablé con su dba y sysadmin. Según ellos, "nada ha cambiado" en el entorno recientemente, lo que causaría este problema.

entorno db

MSSQL 2005 Service Pack 2 de 64 bits Conductor: sqljdbc.jar: 1,0 809 102

Nota: se está ejecutando un controlador JDBC más. AFAIK intentaron actualizar de 1.0 a 1.2, pero tuvo algún otro problema.

otro entorno emite

Están corriendo el servidor de aplicaciones y el servidor db en VMWare VM. No sé cómo esta configuración afecta el rendimiento de la red.

Aparentemente esta es la única aplicación con este problema. No sé nada más sobre su arquitectura de red.

Preguntas * ¿Tiene alguna idea sobre este problema? * si se trata de una red, ¿los siguientes pasos para analizar?

Apéndice A: Extracto de rosca volcado

Todas las conexiones HTTP están colgando en el mismo método:

 
"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) 
+0

He visto cosas así si la conexión pasa por una tonta entrada NAT – nos

Respuesta

8

Hemos tenido problemas similares, y les remonta a una actualización de JDK con errores (1.6.29).

Descargamos 1.6.27 (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u27-oth-JPR), re -establecer el entorno JAVA_HOME y volvimos a la pista.

+2

Muchas gracias por la respuesta precisa. Tuvimos exactamente el mismo problema, lo rastreamos para hacer ping a un grupo de conexiones JDBC en Glassfish que cuelga sin ningún mensaje de error. Vuelva a 1.6.27 resolver el problema. Gracias –

+0

Nos hemos encontrado con el mismo problema. La degradación lo arreglará. –

2

Son los cambios a JSSE en la versión 1.6 u29. El cambio consiste en parchear parcialmente CVE-2011-3389 y CVE-2011-3560.

Si no están implementando applets y usando java web-start. Es posible que solo pueda usar 1.6 u27 jsse.jar. Todavía tendrá la vulnerabilidad, pero permitirá que sqljdbc.jar y sqljdbc4.jar funcionen.

Las otras opciones para migrar a Java 7, el sqljdbc4.jar funciona en ese entorno.

El parche no está completo. Así que espera más cambios en los parches futuros.

Cuestiones relacionadas