java.io.IOException: Invalid argument
J'ai une application web qui s'exécute en mode cluster avec un équilibreur de charge.
Elle se compose de deux matous (T1 et T2) de répondre à un seul DB.
T2 est monté par nfs à T1. C'est la seule dofference entre les deux nœuds.
J'ai une méthode en java de générer des fichiers. Si la demande
fonctionne sur T1 il n'y a pas de problème mais si la demande est en cours d'exécution sur le nœud 2
J'obtiens une exception comme suit:
java.io.IOException: Invalid argument
at java.io.FileOutputStream.close0(Native Method)
at java.io.FileOutputStream.close(FileOutputStream.java:279)
Le code correspondant est comme suit:
for (int i = 0; i < dataFileList.size(); i++) {
outputFileName = outputFolder + fileNameList.get(i);
FileOutputStream fileOut = new FileOutputStream(outputFileName);
fileOut.write(dataFileList.get(i), 0, dataFileList.get(i).length);
fileOut.flush();
fileOut.close();
}
L'exception apparaît à la fileOut.close()
Tout soupçon?
Luis
Pouvez-vous écrire des fichiers normalement à partir de l'OS de T2 (ie. en dehors de Java)?
Oui, je le peux. En outre, lorsque l'exceptio nin jeté un fichier vide est généré.
Oui! Je peux écrire dans le système de fichiers directement à partir d'un shell. En outre. Un fichier vide est généré.
Oui, je le peux. En outre, lorsque l'exceptio nin jeté un fichier vide est généré.
Oui! Je peux écrire dans le système de fichiers directement à partir d'un shell. En outre. Un fichier vide est généré.
OriginalL'auteur Luixv | 2009-04-23
Vous devez vous connecter pour publier un commentaire.
La définition de cette ligne dans le
.profile
résolu le problème:OriginalL'auteur ed123
Comment ne dataFileList et fileNameList obtenir? Vous pourriez être en cours d'exécution hors de descripteurs de fichiers. C'est étrange qu'il se passe sur close ().
OriginalL'auteur mtnygard
J'ai enfin trouvé la raison.
D'abord, j'ai remarque que PAS toujours cette exception vient
au même point.
Était parfois un
java.io.IOException: Invalid argument
à java.io.FileOutputStream.close0(Native method)
à java.io.FileOutputStream.fermer(FileOutputStream.java:279)
^^^^^
et parfois
Donc le problème n'est PAS un java problème. Même pas un NFS problème.
Le problème est le sous-jacent type de Système de Fichiers qui est un DRBD
système de fichiers.
Les essais à un shell pour écrire sur les nœuds fonctionne si l'on écrit un petit
fichier. I. e:
à la nfs monté nœud
mais
livrera l'erreur suivante
Donc la solution est d'utiliser un autre type de système de fichiers, gfs par exemple.
OriginalL'auteur Luixv