【问题标题】:Java Code for getting memory heapdumps of an application for monitoring it [closed]用于获取应用程序的内存堆转储以对其进行监控的 Java 代码 [关闭]
【发布时间】:2014-01-24 09:51:12
【问题描述】:

您好,我需要一些 Java 代码来获取 JVM 的内存转储以监控应用程序性能。是否可以使用 java 代码分析内存转储。我需要分析不同互连网络上可用的多个 JVM 的内存转储。

【问题讨论】:

  • 我不明白为什么这个问题被搁置了。 “我需要一些 Java 代码来获取内存转储”表明这是一个关于代码示例的问题。

标签: java memory-leaks jvm


【解决方案1】:

您可以通过获取 HotSpotDiagnosticMXBean 实例(命名)并调用 dumpHeap() 方法来实现:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();
HotSpotDiagnosticMXBean bean = ManagementFactory.newPlatformMXBeanProxy(server,
                "com.sun.management:type=HotSpotDiagnostic", HotSpotDiagnosticMXBean.class);
bean.dumpHeap("filename", /* live objects */ true);

更多信息可以在http://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html#dumpHeap(java.lang.String, boolean)找到

如果您需要比较内存使用情况,另一种选择是获取MemoryPoolMXBean,它可以返回有关各种内存空间的一些有用信息

【讨论】:

  • 当我尝试调用上面的代码时,出现以下错误注意 - 我正在使用 JDK 1.7“访问限制:由于对所需库 C:\Program Files 的限制,无法访问 HotSpotDiagnosticMXBean 类型\Java\jre7\lib\rt.jar"
  • 我设法运行了代码,但这给了我与以下命令相同的结果 cmd:> jsp 用于查找进程 id cmd:> jmap -dump:format=b,file=c:\Temp \mymemorydump pid 但我需要一些可以让我读取此 memorydump 文件并比较两个转储的东西
  • @nikhilgupta86 - 我已经扩展了我的答案,希望它会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2017-04-07
  • 2015-12-13
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多