簡體   English   中英

在JVM中增加駐留內存大小是否表明內存泄漏?

[英]Does and increasing resident memory size in the JVM indicate a memory leak?

我正在使用以下命令行選項啟動JBoss 4.2服務器實例:

-Xms8192m -Xmx8192m -XX:+ DisableExplicitGC -XX:MaxPermSize = 512m

我沒有收到OutOfMemoryException,但是如果因為他們的引用死亡,那么我不希望內存使用量增加。 常駐內存使用量(以頂部測量)從~4.2G開始,並在接下來的幾天內持續增加到一周,直到達到8.4G。 我仍然沒有收到異常。 我擔心的是,在重要活動期間(JBoss Messaging處理> 10k mssgs / sec),每隔6-10秒就會出現約100-700ms的處理滯后。 這似乎與駐留內存使用量的增加有關。 這是在具有2個四核處理器和32G內存的機器上進行的。

我將打開其他命令行參數:

-verbosegc -XX:+ PrintGCDetails

但是,我想知道這似乎是垃圾收集問題,還是內存泄漏? 我試圖追蹤潛在的內存泄漏幾周,並找到了我認為肯定會修復它的XML處理的東西,但這是一個死胡同。 無論是否存在泄漏,常駐內存使用量是否會升高以滿足Xmx的值(特別是在禁用顯式GC的情況下)? 是否有一些其他垃圾收集參數可能有幫助,如果它確實不是泄漏(如修改垃圾收集器類型,幸存者比率或暫停目標)?

我知道100-700ms的延遲似乎並不多,但它有可能在這個應用程序中產生重大影響。 提前感謝您提供的任何幫助/建議。

Java中“泄漏”的定義與C / C ++中“泄漏”的定義大不相同。 在C / C ++中,當您使用mallocnew的存儲空間時,您會收到“泄漏”,並且從未隨后freedelete它。

但是在Java中,當然,你永遠不會刪除任何內容,而是將它留給GC來查找不再引用的內容並將其釋放。

然而,可能發生的是,一些復雜的數據結構被構建,然后構建更多,然后建立更多,有時是無意的。

最明顯的情況是類似於StringBuffer,用於累積日志信息而從不寫入/清空。 但是你也可以在你的應用程序中有一個(故意)長壽命的結構,你碰巧“停放”了一些(假設的)短命對象,但是在你之后null指向“短命”對象的指針完成它,使它有效地成為不朽的。 其中一些是顯而易見的,有些需要大量的調查來弄清楚。

但是在一個大型服務器中,即使沒有這樣的泄漏,你也會在一段時間內相當穩定地積累“東西”。 例如,如果調用給定的應用程序,它可能會導致創建一些對象(或者僅加載類,它們間接創建的對象),並且這些對象可能“掛起”直到下次調用應用程序。 像網頁緩存這樣的東西填滿了。 如果使用類似JSP的東西,則會創建並“緩存”以供以后使用的對象。

但是這種“東西”的積累應該觀察到漸近的行為,隨着時間的推移慢慢接近一些穩態值。 如果它在穩定狀態下繼續向上,那么你可能會有“泄漏”。

重新啟動GC行為,在繁忙的服務器上每隔幾秒運行一次GC並不罕見。 您可以使用調整參數來嘗試“平衡”不同的GC“層”,但這樣做有點黑色。 並且通常在服務器上的GC性能不佳只是因為GC實現沒有為服務器設計良好 - 繁忙的服務器上的GC需要能夠以大部分並發的方式運行,並且大多數GC實現不會做得很好。

我沒有收到OutOfMemoryException,但是如果因為他們的引用死亡,那么我不希望內存使用量增加。

這不一定正確。 對象可以放在堆的tenure內存中。 如果對象被引用的時間超過“短時間”,則會發生這種情況。 一旦進入任期,它通常不會被垃圾收集到達最大堆。 因為堆內存使用量沒有減少並不意味着你有泄漏。

正常的內存配置文件(使用的堆與時間)看起來像一個鋸齒 - 內存使用緩慢增加,直到某個閾值(通常是最大堆),然后由於GC而減少,然后再次緩慢增加。

我要添加的只是嘗試將探查器連接到您的應用程序,並查看內存使用情況的行為。 我已經用jProfiler和YourKit成功地分析了Weblogic AS的實例,雖然我沒有嘗試過JBoss,但應該相當容易。

您是否可以在測試環境中復制此行為(因為分析器在性能上有點沉重,只有在絕望時才在生產環境中執行)? 如果這樣做,您可以看到GC是否僅在達到XMX閾值時被調用(並不意味着任何錯誤),並且您可以顯式調用GC以查看它的行為方式。 即使使用GC調用,如果內存不斷增加,也可能表示存在問題。

一個不錯的分析器可以告訴你哪些對象的數量增長得更快等等,如果確實有“泄漏”,這可以幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM