2009-08-07 22 views
5

Uno dei nostri clienti presenta un problema nuovo: l'applicazione si arresta. Il dump del thread mostra che tutti i thread sono appesi all'IO di rete nelle chiamate JDBC.Connessione JDBC sospesa

Non ho mai visto questi 'network IO' bloccati. In genere un problema con la macchina lenta con DB ha o una) una o due query di lunga durata o b) un tipo di blocco/deadlock. In entrambi i casi, i thread si bloccano su metodi diversi. Non ho mai visto tutti i 30+ thread appesi all'IO di rete.

Di seguito ho incluso un estratto dal dump del thread. Tutti i thread HTTP sono sospesi sulla stessa chiamata java.net.SocketInputStream.read.

Ho parlato con loro dba e sysadmin. Secondo loro "nulla è cambiato" nell'ambiente di recente che potrebbe causare questo problema.

ambiente db

MSSQL 2005 Service Pack 2 a 64 bit driver: sqljdbc.jar: 1,0 809 102

Nota: sono in esecuzione un driver JDBC più vecchio. AFAIK hanno provato ad aggiornare da 1.0 al driver 1.2 ma avevano qualche altro problema.

altro ambiente emette

Stanno in esecuzione sia il server applicazione e il server db in VMWare VM. Non so come questa configurazione influenzi le prestazioni della rete.

Apparentemente questa è l'unica applicazione con questo problema. Non conosco altro sulla loro architettura di rete.

Domande * eventuali approfondimenti su questo problema? * se si tratta di rete, eventuali passi successivi per l'analisi?

Appendice A: Estratto dal filo discarica

Tutte le connessioni HTTP sono appesi con lo stesso metodo:

 
"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

Ho visto cose del genere se la connessione passa attraverso uno stupido gateway NAT – nos

risposta

8

Abbiamo avuto problemi simili, e li risalire a un aggiornamento di JDK buggy (1.6.29).

Abbiamo scaricato 1.6.27 (http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u27-oth-JPR), re -impostare l'ambiente JAVA_HOME e siamo tornati in pista.

+2

Grazie mille per la risposta precisa. Abbiamo avuto lo stesso identico problema, lo rintracciamo nel ping di un pool di connessioni JDBC in Glassfish che si blocca senza alcun messaggio di errore. Ripristina 1.6.27 per risolvere il problema. Grazie –

+0

Abbiamo riscontrato lo stesso problema. Il downgrade lo risolverà. –

2

Sono le modifiche a JSSE nella versione 1.6 u29. La modifica consiste nel patch parziale CVE-2011-3389 e CVE-2011-3560.

Se non si distribuiscono le applet e si utilizza java web-start. Potresti essere in grado di utilizzare semplicemente jsse.jar 1.6 u27. Stai ancora per avere la vulnerabilità, ma consentirà a sqljdbc.jar e sqljdbc4.jar di funzionare.

Le altre opzioni per migrare a Java 7, sqljdbc4.jar funzionano in quell'ambiente.

La patch non è completa. Quindi aspettatevi ulteriori cambiamenti nelle patch future.

Problemi correlati