【发布时间】:2010-09-28 18:04:49
【问题描述】:
我在 Linux 系统上运行 Java 应用程序。我注意到该应用程序似乎消耗了很多文件句柄(几天后我收到“打开的文件太多”)。
因此,当我使用“lsof”命令转储与 Java 应用程序关联的所有文件时,我会得到如下信息:
java 2690 root 239u REG 3,2 428057 94300 /tmp/jar_cache5782499018536796385.tmp (deleted)
java 2690 root 240u REG 3,2 58955 94360 /tmp/jar_cache3818842806647031366.tmp (deleted)
java 2690 root 241u REG 3,2 28673 94301 /tmp/jar_cache8793213887943479521.tmp (deleted)
java 2690 root 242u REG 3,2 67115 94302 /tmp/jar_cache3648070144390426051.tmp (deleted)
我在这里只展示了 4 个,但实际上有 87 个,而且这个数字会随着时间的推移而增长。
根据我在网上阅读的内容,Java 在内部使用这些临时文件或其他东西,它们是正常的。
正如上面的输出所说,它们被删除了,我确认它们在文件系统上实际上并不存在。
但我担心的是它没有释放文件描述符或任何相关的内存......有没有人知道这些'/tmp/jar_cache####.tmp'文件或有经验这些?
【问题讨论】:
-
你能指定java供应商和版本吗? (例如 Sun 1.4.2 或 1.6.0_18 或 OpenJDK 或类似的东西)。
-
java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b06) Java HotSpot(TM) Client VM(build 17.0-b16,混合模式,共享)跨度>
-
这是 POJO 还是某种 J2EE 或 Web 容器?我从未听说过 POJO 会自行打开随机 tmp 文件。
标签: java linux temporary-files