【问题标题】:How create a memory dump of a Java process run as windows service?如何创建作为 Windows 服务运行的 Java 进程的内存转储?
【发布时间】:2011-09-14 14:02:04
【问题描述】:

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

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

【问题讨论】:

  • 你有十多个问题没有接受。 ;)
  • 到目前为止,两个答案都针对关键问题 - 要么以管理员身份运行 JConsole,要么设置 JmxRemote,或者使用 taskmgr(我必须尝试 - 我从来没有这样做过:) )
  • @Peter Lawrey 你只有一个问题。所以你不能收到超过几十个不被接受的问题。
  • 我认为,当您提出更多问题时,您应该在这些问题上做得更好,并提出可以接受答案的问题。我回答了很多问题,但并不自称擅长提问。 ;)
  • 查看this blog post,了解如何监控作为 Windows 服务运行的 java 进程。

标签: java windows memory service


【解决方案1】:

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

【讨论】:

  • 我的意思是 Java 内存转储,也称为堆转储。我不需要 Windows 内存转储。
  • 如果你尝试运行 jVisualVM 或 jconsole 提升?
  • 必须是同一个用户帐号。这意味着我需要使用系统帐户(而不是管理员)运行它。我不知道这是如何工作的。
  • 为什么不将 Windows 服务作为您的帐户运行以进行调试?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2016-12-31
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多