2011-11-02 66 views
1

解決Grails應用程序中當前PermGen用法的最佳方法是什麼?如何檢測PermGen空閒內存

我試圖做

調用Runtime.getRuntime()freeMemory()的一些圖形。

Runtime.getRuntime()。totalMemory();

我還想測量自由PermGen空間。大部分搜索引擎+ Stack Overflow結果都是關於處理PermGenOutOfMemory類似的錯誤,我只想訪問這些統計信息。

回答

3

只需使用JConsoleVisualVM連接到它。 Theres沒有辦法讓您以編程方式確定應用程序中的PermGen大小。你可以使用MemoryMXBean做簡單的內存報告,但堅持使用我提到的工具來獲得更詳細的圖片。

+1

也許[鏈接到HOWTO(http://pulkitsinghal.blogspot.com/2011/04/finding-current-permgen-size-via.html )? –

+0

@tim,好點。我提供了兩個文檔鏈接。 –

+0

請參閱我寧願如果應用程序中有某種方式可以確定它,那樣我就可以簡單地自動將它推送到數據庫進行報告。但是,謝謝你,MemoryMXBean看起來像是朝着正確方向邁出的一步。 – Noxville

0

我認爲ManagementFactory可能是來源,從列表返回的其中一個池getMemoryPoolMXBeans()應該是PermGen。

+0

我可能在這裏錯了 - 但我不認爲PermGen報道。 –

1

我想你應該試試這個

public class Main { 
    public static void main(final String[] args) { 
     final RuntimeMXBean memMXBean = ManagementFactory.getRuntimeMXBean(); 
     final String prefix = "-XX:MaxPermSize="; 
     final List<String> jvmArgs = memMXBean.getInputArguments(); 
     String maxPermSize = null; 
     for (final String jvmArg : jvmArgs) { 
      if (jvmArg.startsWith(prefix)) { 
       maxPermSize = jvmArg.substring(prefix.length()); 
       break; 
      } 
     } 

     System.out.println("MaxPermSize is " + maxPermSize); 
    } 
}