Java Windows上运行的1.5 JVM的触发器堆转储

Java Windows上运行的1.5 JVM的触发器堆转储,java,windows,jvm,Java,Windows,Jvm,我正在尝试诊断Sun One 9.1应用程序服务器中的PermGen内存泄漏问题。为了做到这一点,我需要获得JVM进程的堆转储。不幸的是,JVM进程是在Windows上运行的1.5版。显然,触发堆转储的方法都不支持这种设置。我可以让JVM在内存耗尽后或关闭时进行堆转储,但我需要能够在任意时间获得堆转储 获取堆转储的两种常用方法是使用jmap或使用HotSpotDiagnostic MBean。它们都不支持Windows上的JVM1.5 有没有我错过的方法?如果有一种方法可以通过编程触发堆转储(而

我正在尝试诊断Sun One 9.1应用程序服务器中的PermGen内存泄漏问题。为了做到这一点,我需要获得JVM进程的堆转储。不幸的是,JVM进程是在Windows上运行的1.5版。显然,触发堆转储的方法都不支持这种设置。我可以让JVM在内存耗尽后或关闭时进行堆转储,但我需要能够在任意时间获得堆转储

获取堆转储的两种常用方法是使用jmap或使用HotSpotDiagnostic MBean。它们都不支持Windows上的JVM1.5

有没有我错过的方法?如果有一种方法可以通过编程触发堆转储(而不使用HotSpotDiagnostic MBean),那也可以

如果在Windows中真的不可能做到这一点,我想我不得不求助于构建一个Linux虚拟机并在那里进行调试


谢谢。

在Java6中引入了一个新的热点选项,
-XX:-HeapDumpOnOutOfMemoryError
,它实际上是后端口到Java5 JVM的

将堆转储到文件时 抛出java.lang.OutOfMemoryError。 可管理的(在1.4.2中介绍) 更新12,5.0更新7。)

它很方便。JVM的寿命刚好足以将堆转储到文件中,然后就崩溃了

当然,这确实意味着您必须等待泄漏严重到触发
OutOfMemoryError

另一种方法是使用探查器,如。这提供了获取正在运行的JVM的堆快照的方法。我相信它仍然支持Java5


另外,您确实需要升级到java 6….

如果是或更高版本,您可以使用
-XX:+HeapDumpOnCtrlBreak
并在控制台中点击Ctrl-Break

谢谢。我一直在用这种方法,但还不够。我需要在任意时间以某种方式触发堆转储。“另外,您真的需要升级到java 6…”-我希望:)@jthg-您显然没有对您的管理层/客户/供应商施加足够的压力:-)如果没有控制台,是否可以将Ctrl-Break发送到进程?或者你知道有没有办法让Sun One应用服务器为jvm进程打开一个控制台?不知道Sun One服务器。常见的方法是:1-编辑启动脚本(如果存在)并用java替换javaw;2-查找主类并手动运行它我已经求助于使用-XX:+HeapDumpOnOutOfMemoryError和一个试图分配非常大数组的jsp页面。当我需要内存转储时,我可以直接点击jsp页面。效果很好。