运行以下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的可用空间。
非常感谢任何建议。
答案 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
用来避免并发问题的原因。 (我说“可能”因为它似乎没有在任何地方记录。)
在没有锁定的情况下,文件操作相互干扰只是时间问题。减少实例数量不是解决方案,因为它只会降低实例的可能性。
我认为解决方案是确保每个实例在不同的子目录中创建文件