【问题标题】:How long are resources used (file descriptor and memory) for Java temporary files (jar_cache####.tmp)?Java 临时文件 (jar_cache####.tmp) 使用资源(文件描述符和内存)多长时间?
【发布时间】: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


【解决方案1】:

/tmp/jar_cache 文件是在通过 URLClassloader 加载 jar 时生成的。我怀疑应用程序的某些组件正在重新加载,这会导致旧的 jar_cache 文件被删除并创建新的文件。不过,文件句柄未释放的事实似乎是 JVM 问题——我在相同的 JDK 版本中也看到了这种行为。

在这个 JVM 错误中存在这些方面的 cmets: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4166799

虽然该问题已在不久前关闭。

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 2012-06-28
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2014-04-25
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多