【问题标题】:How do I spawn a JVM from a JVM that is easy to control and monitor?如何从易于控制和监视的 JVM 生成 JVM?
【发布时间】:2013-01-29 12:22:25
【问题描述】:

我想从一个 Java 类跨越一个新的 JVM 进程。

我可以使用Runtime.getRuntime().exec(...),但这是一个非常低级的 api。

我正在寻找可以为我包装 Process api 的更方便的东西,例如:

MonitoredJavaProcess javaProcess = new MonitoredJavaProcess(MyMainClass.class, "-Xmx1g");
javaProcess.getGcLogStream();
javaProcess.getHeapSizeObserver();
// ...
javaProcess.waitForShutdown();

关于我正在尝试做的事情的一些背景信息:我正在运行 JUnit 一个测试套件,它会启动一个嵌入式 Jetty 服务器并针对它运行一些测试。这意味着经过测试的 Jetty 服务器线程和 junit 测试线程在同一个 JVM 中运行。我需要在分开的 JVM 上运行它们。我可以使用 ant 或 maven 或启动码头外部的任何东西,然后针对它运行测试套件,但对于我的简单场景来说,这听起来有点矫枉过正。

【问题讨论】:

  • 也许javamelody(一个JVM监控工具)可以帮到你。

标签: java jvm


【解决方案1】:

也许你的方法不是正确的。或许您应该考虑使用JMX 来监控您的JVM?

干杯,

【讨论】:

  • 关于我正在尝试做的事情的一些背景信息:我正在运行 JUnit 一个测试套件,它会启动一个嵌入式 Jetty 服务器并对其进行一些测试。这意味着经过测试的 Jetty 服务器线程和 junit 测试线程在同一个 JVM 中运行。我需要在单独的 JVM 中运行它们。我可以使用 ant 或 maven 或启动码头之外的任何东西,然后针对它运行测试套件,但对于我的简单场景来说,这听起来有点矫枉过正。
  • 好吧,我不明白为什么你需要一个单独的 JVM,但我仍然认为 JMX 是在你的场景中衡量性能的好选择。
  • 我需要单独的 JVM 来测量生产代码的 CPU 和内存以及 GC 统计信息。我不希望 JUnit 测试线程对性能报告产生任何影响。这些 JUnit 测试本身也使用大量内存和 CPU。我决定将 ProcessBuilder 和 JMX 包装在一个类 JettyServerInseparateJvm 中,该类执行进程处理并通过方法公开 JMX 统计信息。
【解决方案2】:

你实际上想要做什么。 也许您可以查看java.lang.ProcessBuilder,它可能适合您的需求。

【讨论】:

  • 关于我正在尝试做的事情的一些背景信息:我正在运行 JUnit 一个测试套件,它会启动一个嵌入式 Jetty 服务器并对其进行一些测试。这意味着经过测试的 Jetty 服务器线程和 junit 测试线程在同一个 JVM 中运行。我需要在分开的 JVM 上运行它们。我可以使用 ant 或 maven 或启动码头之外的任何东西,然后针对它运行测试套件,但对于我的简单场景来说,这听起来有点矫枉过正。
  • java.lang.ProcessBuilder 提供了更多功能,但不幸的是,离我想要的还很远。
猜你喜欢
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多