删除了Linux标识符

时间:2013-01-29 21:00:18

标签: java linux

运行以下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似乎对我没什么用。系统运行Scientific Linux 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的可用空间。

非常感谢任何建议。

3 个答案:

答案 0 :(得分:0)

您看到了EIDRM。至少错误消息看起来像那样。 IOException包装来自底层本机库的错误消息。

这不是您问题的真正答案,但可能是一个有用的提示。

http://docs.oracle.com/cd/E19455-01/806-1075/msgs-1432/index.html提供了一些额外的信息。

答案 1 :(得分:0)

问题似乎与一次有太多应用程序实例(每个实例都在一个单独的VM中)有关。由于某些未知原因,操作系统拒绝允许创建临时文件。解决方法:运行较少的实例。

答案 2 :(得分:0)

您遇到各种实例之间的同步错误。 Lustre不支持文件锁定,这可能是java.io.UnixFileSystem.createFileExclusively用来避免并发问题的原因。 (我说“可能”因为它似乎没有在任何地方记录。)

在没有锁定的情况下,文件操作相互干扰只是时间问题。减少实例数量不是解决方案,因为它只会降低实例的可能性。

我认为解决方案是确保每个实例在不同的子目录中创建文件