代码之家  ›  专栏  ›  技术社区  ›  Jeach

Java临时文件(jar#u cache####.tmp)的资源(文件描述符和内存)使用了多长时间?

  •  1
  • Jeach  · 技术社区  · 15 年前

    我正在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个,而且这个数字会随着时间的推移而增长。

    正如上面的输出所说,它们被删除了,我确认它们在文件系统中不存在。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Greg    15 年前

    /tmp/jar\u缓存文件是在通过URLClassloader加载jar时生成的。我怀疑应用程序的某些组件正在被重新加载,这会导致删除旧的jar\u缓存文件并创建新的文件。文件句柄没有被释放的事实看起来像是一个JVM问题——我在同一个JDK版本中也看到过这种行为。

    关于这个JVM错误,有如下评论: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4166799

    虽然这个问题不久前就解决了。