2012-06-17 15 views
1

使用G1收集器时,有没有人有JVM(热点)泄漏内存问题?使用G1收集器时JVM是否泄漏内存?

我已经将堆大小修改为60GB(-ms和-ms都设置为60G),但java进程的大小(根据ps命令的vsz列)从64GB左右开始,但在7小时内增加到84GB。

使用并行收集器,工艺大小在20小时左右运行时保持稳定,大约在65GB左右。

有没有其他人有类似的问题与G1收藏家?我正在运行一个非常简单的基准测试,我没有使用任何直接缓冲区内存或其他堆内存(我知道)。

Java版本是1.7.0,更新5

(我已经提出了与甲骨文有关于此的缺陷,但认为我会在这里检查以及万一任何人有一种变通方法)。

+1

发送您的问题[email protected]。 –

+0

@Neil你能告诉我们你正在使用的Java版本吗? –

+0

@ alain.janinm当然,它是1.7.0,更新5.我已经更新了这个问题。 – Neil

回答

1

有没有其他人有与G1收藏家类似的问题?

不久 - 是的。

这里大约是导致内存泄漏SO话题:

Creating a memory leak with Java

它包含信息关于G1

使用的InflaterInputStream在传递新java.util.zip.Inflater中的() c-tor(例如PNGImageDecoder),而不是调用inflater的 的end()。那么,如果你通过c-tor w /只是新的,没有机会...和 是调用流close()不会关闭inflater如果它手动作为c-tor参数传递 。这不是一个真正的泄漏,因为它会在最终确定者发布 时...当它认为有必要时。直到 那么它吃的本地内存如此糟糕,它可能会导致linux oom_killer到 杀死进程而不受惩罚。主要问题是,在java中定义 非常不可靠,并且G1使它更糟,直到7.0.2。 故事的道德:尽快释放本地资源,终结者 太差了。

泄漏也被这里提到:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7152954

+0

非常感谢您的信息。我没有使用inflaters,也没有明确地调用System.gc()(我很确定我没有使用什么),所以我不认为我看到的问题与其中之一。 – Neil

+0

@尼尔真的很难说出什么问题。内存泄漏是痛苦的屁股,alwalys :) – dantuch

+0

@尼尔,我是谁发布的问题瓦特/ G1,你使用哪个版本?最重要的是,它是否会泄漏本机内存?直接ByteBuffers类似于Inflater/Deflater(它们使用本地C内存/ malloc)。 System.gc()总体来说还不错。如果它不是本机内存,那么jmap -histo应该足以描述问题。此外,如果你可以发布基准测试,它会很有用。 – bestsss