qu'est-ce que java.io.EOFException, Message: ne Peut pas lire la réponse du serveur. Lire 4 octets, lire 0 octets

Cette question a été posée à quelques reprises dans la et à de nombreuses reprises dans d'autres sites. Mais je n'obtenez pas de réponse satisfaisante.

Mon problème:

J'ai une application web java qui utilise de simples JDBC pour se connecter à mysql base de données par le biais de Glassfish serveur d'application.

J'ai utilisé le regroupement de connexion au serveur glassfish avec les configurations suivantes:

Initiale De La Taille Du Pool: 25

Taille Maximale Du Pool: 100

Piscine Redimensionner Quantité: 2

Délai d'inactivité: 300 secondes

Max Temps d'Attente: 60000 millisecondes

L'application a été déployée pour les 3 derniers mois et il était en marche parfaitement aussi.

Mais à partir de 2 derniers jours, l'erreur suivante est venue au moment de la connexion.

Partielle StackTrace

com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:  

** BEGIN NESTED EXCEPTION **  

com.mysql.jdbc.CommunicationsException  
MESSAGE: Communications link failure due to underlying exception:  

** BEGIN NESTED EXCEPTION **  

java.io.EOFException  
MESSAGE: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.  

STACKTRACE:  

java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.  
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1997)  
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411)  
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)  
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)  
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)  
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)  
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)  
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)  
............  
............  
my application traces....  

Ce qui a provoqué cette erreur tout d'un coup ? J'ai perdu beaucoup de temps pour cela.

EDIT : Le problème persiste même après le redémarrage du serveur. Comme par DBA deux de la important du serveur mysql configurations sont les suivantes:

wait_timeout : 1800 secondes

connect_timeout : 10 secondes

REMARQUE : d'Autres applications déployées dans le même serveur de la connexion à la même base de données et à l'aide de différentes piscines sont en cours d'exécution en douceur.

EDIT-2 : Après avoir lu beaucoup de choses et ils s'attendaient à quelque résultat positif, j'ai fait ces changements pour mon pool de connexion.

Max Temps d'Attente : 0 (auparavant, il était de 60 secondes)

Connexion De Validation : Nécessaire

Méthode de Validation : table

Nom De La Table : Démo

Valider antérieure au plus une Fois : 40 secondes

Création Tentatives : 1

Intervalles de relance : 5 secondes

Max L'Utilisation De La Connexion : 5

Et cela a fonctionné tant que l'application est en cours d'exécution pour 3 jours de manière cohérente. Mais j'ai eu une très étrange et résultat intéressant de cette. Lors de la surveillance de la connexion de la piscine, j'ai trouvé ces chiffres:

NumConnAcquired : 44919 Compter

NumConnReleased : 44919 Compter

NumConnCreated : 9748 Compter

NumConnDestroyed : 9793 Compter

NumConnFailedValidation : 70 Compter

NumConnFree : 161 Compter

NumConnUsed : -136 Compter

Comment pouvez le NumConnFree devenir 161 comme je l'ai Maximum Pool Size = 100 ?

Comment pouvez le NumConnUsed devenir -136, un négatif nombre ?

Comment pouvez le NumConnDestroyed > NumConnCreated ?

  • Essayez d'utiliser le même ou plus petites valeurs de délai d'attente au sein de votre application et de la base de données. Par exemple, si les demandes de délai d'inactivité est plus élevé que celui de la base de données de votre application va essayer de réutiliser une connexion qui a déjà été fermée par le serveur de base de données.
  • Il aide à augmenter la piscine redimensionner la quantité? Voir la raison ici
InformationsquelleAutor mukund | 2012-12-19