当前位置: 首页 > 面试题库 >

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

东方涛
2023-03-14
问题内容

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

经常提到的两种获取堆转储的方法是使用jmap或使用HotSpotDiagnostic MBean。这些都不支持Windows上的jvm 1.5。

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

如果真的不可能在Windows中执行此操作,我想我不得不求助于构建Linux VM并在那里进行调试。

谢谢。


问题答案:

Java6中引入了一个新的热点选项-XX:-HeapDumpOnOutOfMemoryError,该选项实际上已反向移植到Java5 JVM。

http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

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

非常方便。JVM的寿命刚好足以将其堆转储到文件中,然后崩溃。

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

一种替代方法是使用分析器,例如YourKit。这提供了对正在运行的JVM进行堆快照的方法。我相信它仍然支持Java5。

PS您 真的 需要升级到Java 6 ....



 类似资料:
  • 问题内容: 我在标准Windows命令窗口中有一个正在运行的Java进程。即我已经运行’cmd’并在java -jar中键入… 我需要尽可能获得所有线程的完整堆栈转储。 我记得在Linux下,您可以通过quit命令上的选项将消息发送到JVM。 在此文件中为太阳状态 若要在Windows 95或Windows NT平台上生成堆栈跟踪,请在运行Java程序的窗口中输入键序列,或单击窗口上的“关闭”按钮

  • 我有一个运行在JVM7上的JBoss 4.2.1应用程序,它在抛出时触发了堆转储。我用以下开关配置了jvm: 我正试图通读堆转储,以找出到底是什么导致了我的oome。我看到大量内存被消耗,但这在一定程度上是意料之中的。此刻我要找的是“确凿的证据”。

  • 背景: 我正计划创建一个在初始源代码阶段中具有多个源代码操作的代码管道。每个源操作都是一个GitHub repo,它将有自己的AWS代码管道webhook。在管道的下一个阶段中,我希望有一个invoke操作,该操作将获取触发管道运行的管道执行的webhook,并将下游构建阶段的输入工件设置为与触发的webhook关联的源操作。例如,如果repoa的webhook导致管道执行#1,那么调用操作将以某

  • 我有一台带有Intel CPU的Windows机器(在引导菜单上启用VMX)。我使用VirtualBox在上面运行Ubuntu Guest。我在上面运行qemu,以运行另一个Guest OS,使用kvm(选项)。 我在尝试插入kvm-intel模块时收到以下错误: 我已经检查了来宾操作系统中的vpx标志,但我也没有看到 有没有办法在来宾Ubuntu操作系统中启用kvm支持,以便我可以在Ubuntu

  • 问题内容: 我有一个php脚本,想按计划运行。我在Windows上使用本地Web服务器(WAMP服务器),并且需要一种 每10分钟 运行 一次 的方法。 如何在Windows的localhost上的PHP脚本上运行cron作业? 问题答案: 最近,在进行长期从www那里获取一些链接的测试时,我遇到了一些问题,无法在Windows 7的localhost(WAMP服务器)上的php脚本上运行cron

  • 我在一个TC项目中有两个配置。它们都监视相同的git存储库但不同的分支(作为默认)。总共有3个分支:master(这里没有使用)、Development(用于工作构建和绿色测试)和artemPersonal(用于个人构建) > WEBUI发展。只为绿色存储库使用参考/头/开发分支。在成功的个人构建后,TC将向该分支提交新的提交。 WebUI开发预先测试的提交。使用refs/heads/artemp