Java临时文件(jar_cache ####。tmp)使用了多长时间(文件描述符和内存)?

时间:2010-09-28 18:04:50

标签: java linux temporary-files

我在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'文件或有经验这些?

1 个答案:

答案 0 :(得分:1)

通过URLClassloader加载jar时会生成/ tmp / jar_cache文件。我怀疑应用程序的某些组件正在重新加载,这会导致删除旧的jar_cache文件并创建新的文件。文件句柄未发布的事实看起来像JVM问题 - 我也看到过这种行为以及相同的JDK版本。

这个JVM错误上有这些注释: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4166799

虽然这个问题已经暂时关闭了。