2011-06-14 69 views
1

如何创建Java进程的内存转储作为Windows服务运行?使用jVisualVM,jstack或jconsole等工具,我无法看到该进程,因为该服务使用系统帐户运行。如何创建Java进程的内存转储作为Windows服务运行?

编辑:使用jVisualVM,我可以看到进程,但只显示“不支持此JVM”。

+0

您有超过十个问题没有被您接受。 ;) – 2011-06-14 10:19:33

+0

到目前为止的两个答案都碰到了关键问题 - 或者以管理员身份运行JConsole,或者设置JmxRemote,或者使用taskmgr(我将不得不尝试 - 我从来没有这样做:)) – ericp 2011-06-14 10:27:35

+0

@Peter Lawrey你只有一个问题。所以你不能收到更多的数十个未被接受的问题。 – Horcrux7 2011-06-14 10:47:27

回答

1

要使用这些工具,您需要以与服务相同的用户身份运行。如果您不需要此安全功能,则需要为服务器设置JMX以允许远程访问(也可以与不同用户在同一个盒子上工作)

如果您使用taskmgr创建低级别内存转储你将无法找到任何可以理解输出的工具。您需要使用Java工具来触发转储。

+0

可以通过命令行参数启用JMX吗? – Horcrux7 2011-06-14 10:33:53

+0

我找到了Google的命令行参数。 – Horcrux7 2011-06-14 10:43:06

0

如果您使用的是Windows 7/Vista,请以管理员身份运行taskmgr,找到您的进程,右键单击“创建内存转储”。如果以管理员身份运行,其他工具也可能正常工作。这个过程需要被提升以获得一个不属于你自己的过程的内存转储。

+0

我的意思是一个Java内存转储,也称为堆转储。我不需要Windows内存转储。 – Horcrux7 2011-06-14 10:19:30

+0

如果您尝试运行jVisualVM或jconsole提升? – vcsjones 2011-06-14 10:20:47

+0

它必须是相同的用户帐户。这意味着我需要使用系统帐户(而不是管理员)来运行它。我不知道这是如何工作的。 – Horcrux7 2011-06-14 10:33:01

相关问题