Memory leaks Jetty 8服务器上的内存泄漏

Memory leaks Jetty 8服务器上的内存泄漏,memory-leaks,jetty,finalizer,jetty-8,Memory Leaks,Jetty,Finalizer,Jetty 8,我已经取得了内存转储,用内存分析器分析了它。它显示了java.lang.ref.finalizer对象占用的73%内存。我去看看这个很大的物体里面有什么。我发现它看起来像是对象的递归轨迹。下面看起来像 Finalizer |__ Finalizer (recursive) |__ java.io.FileInputStream or org.eclipse.jetty.util.resource.FileResource 在FileResource中,我找到了提取war文件的路径,但找不到Fi

我已经取得了内存转储,用内存分析器分析了它。它显示了java.lang.ref.finalizer对象占用的73%内存。我去看看这个很大的物体里面有什么。我发现它看起来像是对象的递归轨迹。下面看起来像

Finalizer
|__ Finalizer (recursive)
|__ java.io.FileInputStream or org.eclipse.jetty.util.resource.FileResource
在FileResource中,我找到了提取war文件的路径,但找不到FileInputStream对象中的内容

也可以在这里找到截图。


请告诉我。

这本身不是泄漏。请阅读:关于JVM中的最终机制

如果创建了太多finalazble对象(在您的示例中为FileInputStream),终结器可能会成为一个问题。您可以尝试稍微减小堆大小,以便垃圾收集器更频繁地运行并更快地处理它们


或者,如果可能的话,最好减少FileInputStreams的使用。

我们正在Jetty Server 8上运行高负载web应用程序,因此我们为该进程保留了2GB的内存。使用jmap发现旧一代的内存很快就满了,我们总是在旧一代的90%重新启动服务器。当内存满了时,它会被清理吗。只是担心服务器崩溃。说实话,以90%的旧版本重新启动服务器是很奇怪的。你们不相信GC吗?或者您的数据量内存不足?还是怀疑内存泄漏?然后试试我们的工具。我不知道Java中的终结器,怀疑内存泄漏,这就是重新启动的原因。谢谢你的澄清。但GC在所有内存都已满之前不会运行。只有当100%内存被旧的gen终结器对象填满时,GC才会运行。