2

次のJavaコードを実行しているときに、興味深い問題が発生しました。

    File.createTempFile("temp.cnt.ent", "cnt.feat.tmp", directory);

次の例外がスローされます。

    Exception in thread "main" java.io.IOException: Identifier removed
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.checkAndCreate(File.java:1704)
    at java.io.File.createTempFile(File.java:1792)

私はこれまでこの問題を経験したことがなく、Googleは私にとってあまり問題がないようです。システムはScientificLinuxリリース5.8(Linux 2.6.18-274.3.1.el5 x86_64)を実行し、Javaバージョンは

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)

ファイルシステム(Lustre)には80TBの空き容量があります。

どんな提案でも大歓迎です。

4

3 に答える 3

0

この問題は、一度に (それぞれ別の VM に) アプリケーションのインスタンスが多すぎることに関連しているようです。なんらかの理由で、OS は一時ファイルの作成を許可しません。回避策: 実行するインスタンスを減らします。

于 2013-03-05T16:38:54.590 に答える
0

さまざまなインスタンス間で同期エラーが発生しています。Lustre はファイルのロックをサポートしていません。これはおそらくjava.io.UnixFileSystem.createFileExclusively同時実行の問題を回避するために使用されるものです。(どこにも文書化されていないように見えるので、「おそらく」と言います。)

ロックがなければ、ファイル操作が互いに干渉するのは時間の問題です。インスタンスの数を減らすことは、発生する可能性が低くなるだけなので、解決策ではありません。

解決策は、各インスタンスが異なるサブディレクトリにファイルを作成することを保証することだと思います

于 2013-03-06T12:35:31.607 に答える