2012-06-17 14 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