簡體   English   中英

JConsole 中的內存泄漏是什么樣的?

[英]What does a memory leak look like in JConsole?

我正在嘗試使用 JConsole 來查看是否存在內存泄漏但不知道要查找什么。 如果我不得不猜測,盡管垃圾收集,內存使用量應該總是上升,如下所示:

在此處輸入圖片說明

正如您在我的另一個 SO 問題中看到的那樣,我看到了一個鋸齒狀邊緣,內存使用量上升 - 即使瀏覽器關閉並且沒有請求訪問我的本地 Tomcat 服務器 - 然后下降。

在此處輸入圖片說明

Java 中的內存泄漏在 JConsole 中“看起來像”什么?

我認為了解內存泄漏的最好方法是做一個實驗。 嘗試這樣的事情來創建內存泄漏:

    Collection<Object> data = new LinkedList<>();
    while(true) {
        long[] canBeGarbageCollected = new long[10000];
        long[] canNotBeGarbageCollected = new long[100];
        data.add(Arrays.asList(canNotBeGarbageCollected));
    }

除了 JConsole,你還有 VisualVM,它有一個很好的插件叫做“Visual GC”。 Java Mission Control with Flight Recording 可以為您提供很多細節。 命令行上也存在一個非常強大的工具:

jstat -gcutil -h20 $PID 1000

這將表明內存泄漏最終會導致 100% 舊空間利用率 (O),並且 CPU 將花費越來越多的時間進行完整垃圾收集 (FGCT)

暫無
暫無

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

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