2011-11-02 99 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); 
    } 
}