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

Java临时文件(jar#U缓存#####.tmp)的资源(文件描述符和内存)使用了多长时间?,java,linux,temporary-files,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

我在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#u cache”######.tmp”文件吗?或者有过使用这些文件的经验吗?

在通过URLClassloader加载jar时会生成/tmp/jar##u cache文件。我怀疑应用程序中有这样的组件正在重新加载,这将导致删除旧的jar_缓存文件并创建新的文件。但是,文件句柄未发布这一事实似乎是JVM的问题—我在相同的JDK版本中也看到过这种行为

关于这个JVM错误,有如下评论:


虽然这个问题不久前已经解决。

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

关于这个JVM错误,有如下评论:


尽管这个问题不久前就解决了。

您能指定java供应商和版本吗?(例如Sun 1.4.2或1.6.0_18或OpenJDK之类)。java版本“1.6.0_21”java(TM)SE运行时环境(build 1.6.0_21-b06)java HotSpot(TM)客户端虚拟机(build 17.0-b16,混合模式,共享)这是POJO还是某种J2EE或web容器?我从来没有听说过POJO自己打开随机的tmp文件。你能指定java供应商和版本吗?(例如Sun 1.4.2或1.6.0_18或OpenJDK或类似的东西)。java版本“1.6.0_21”java(TM)SE运行时环境(构建1.6.0_21-b06)java HotSpot(TM)客户端VM(build 17.0-b16,混合模式,共享)这是POJO还是某种J2EE或web容器?我从来没有听说过POJO单独打开随机tmp文件。