Java Application Hang on Linux “java.io.UnixFileSystem.getBooleanAttributes0"
Unseren Kunden Anwendung scheint zu hängen, mit den folgenden stack trace:
java.lang.Thread.State: RUNNABLE
at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
at java.io.UnixFileSystem.getBooleanAttributes(Unknown Source)
at java.io.File.isFile(Unknown Source)
at org.tmatesoft.svn.core.internal.wc.SVNFileType.getType(SVNFileType.java:118)
at org.tmatesoft.svn.core.internal.wc.SVNFileUtil.createUniqueFile(SVNFileUtil.java:299)
- locked <0x92ebb2a0> (a java.lang.Class for org.tmatesoft.svn.core.internal.wc.SVNFileUtil)
at org.tmatesoft.svn.core.internal.wc.SVNRemoteDiffEditor.createTempFile(SVNRemoteDiffEditor.java:415)
at org.tmatesoft.svn.core.internal.wc.SVNRemoteDiffEditor.applyTextDelta(SVNRemoteDiffEditor.java:255)
Wer weiß, was könnte es verursachen, hängen in isFile?
Du musst angemeldet sein, um einen Kommentar abzugeben.
getBooleanAttributes0
Anrufestat
(oderstat64
wenn verfügbar). Wenn Sie die OpenJDK-Quellcode, dieser ist aufgeführt in der Dateijdk/src/solaris/native/java/io/UnixFileSystem_md.c
.So, die eigentliche Frage ist, warum ist
stat
eingefroren? Ist die Datei zugegriffen wird, ein Netzwerk-Datei auf einem server, zum Beispiel? Wenn dies ein reproduzierbares problem, die Sie verwenden möchtenstrace
zu legen, um den Java-Prozess, kurz vor dem einfrieren. Dann schauen Sie in die Ausgabe für Anrufe zustat
, um zu sehen, was auf den zugegriffen wird.Sieht aus wie die
stat
nennen, die Ergebnisse ausgetBooleanAttributes0
blockiert. Dies geschieht normalerweise, weil die Datei befindet sich auf einer NFS-Freigabe, die unten ist.Sehen wir dieses Problem in Eclipse, wenn es stats einer nicht existierenden Datei in einem NFS-automount-Verzeichnis.
Wenn Sie strace Ihre java-Prozess mit -f -t -T (follow forks und Zeit), was wir sehen, ist, dass die meisten die stats zurück in einer sehr kurzen Zeit. Diejenigen, die in dem automount-Verzeichnis zwei Größenordnungen länger.
In vielen Fällen das OS nimmt dies als eine Gelegenheit, um Kontext-wechseln der thread aus. Das Ergebnis ist, dass das Gewinde der Durchführung der stat nicht ausführen, für eine sehr lange Zeit. Wenn Sie den Java-code (ein Eclipse-plugin in unserem Fall) ist ineffizient Angabe auf den Baum rekursiv für jede Datei, können Sie am Ende sperren diesen thread für eine lange Zeit.
Die Lösung ist zu stoppen, Ihre Java aus zu tun.
Keine Ahnung, aber die offensichtliche Frage, welche JDK/JRE Sinn kommt und was andere haben Sie versucht,...
Vielleicht das SVN-repository ist irgendwie gesperrt, Alles was ich tun kann, ist, erraten.
Führt die Anwendung den Zugriff auf ein subversion-repository?
Es vielleicht auf das repository, um nicht wieder gesperrt-wer weiß seinen Ihrer Anwendung.