Process JAVA bloqués pendant lecture résultat
Bonjour,
Il y a quelques semaines nous sommes passé de sqljdbc_4.0 à sqljdbc_8.4.
Tout semble fonctionner correctement, mais aujourd'hui suite à des attaques DDoS subies par notre hébergeur, nous avons eu quelques threads bloqués à ce niveau :
Citation:
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead(Unknown Source)
java.net.SocketInputStream.read(Unknown Source)
java.net.SocketInputStream.read(Unknown Source)
com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:2054)
com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:6643)
com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:6546)
com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:6524)
com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:6825)
com.microsoft.sqlserver.jdbc.TDSReader.readWrappedBytes(IOBuffer.java:6846)
com.microsoft.sqlserver.jdbc.TDSReader.readUnsignedShort(IOBuffer.java:6773)
com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValuePrep(dtv.java:3393)
com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:3686)
com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:247)
com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:190)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2054)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2040)
com.microsoft.sqlserver.jdbc.SQLServerResultSet.getObject(SQLServerResultSet.java:2372)
...
Voici un extrait de notre code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int SQL_QUERY_TIMEOUT = 90;
Statement instruction = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
instruction.setQueryTimeout(SQL_QUERY_TIMEOUT);
ResultSet resultSet = instruction.executeQuery("SELECT * FROM ...");
if (!resultSet.isBeforeFirst()) {
return 0;
}
ResultSetMetaData resultatMD = resultSet.getMetaData();
int numberOfColumns = resultatMD.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
Object object = resultSet.getObject(i);
// ...
}
} |
1) Quelqu'un a t'il déjà rencontré ce problème avec sqljdbc_8.4 ?
2) Existe t-il un moyen de l'éviter ?
3) Est-ce que ces connexions fantômes sont identifiables coté SQL server ?
Merci d'avance pour votre aide,
Frédéric.