java - PocessBuilder 程序无法远程连接到 JMX

标签 java spring jmx jconsole

我们在通过远程 jmx 连接时遇到问题。我们通过程序通过 ProcessBuilder 运行作业

代码片段:

param ="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=A.B.C.D -Dcom.sun.management.jmxremote.port=9875 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "
ProcessBuilder pb = new ProcessBuilder("java", param,"-cp", jobArtifact.getAbsolutePath());          
pb.command().add("org.springframework.batch.core.launch.support.CommandLineJobRunner");
final Process process = processBuilder.start();

进程正在启动,但是当我们尝试通过远程将其与 jconsole 连接时,它没有连接...并且出现连接失败消息:

Remote connection URL: service:jmx:rmi:///jndi/rmi://A.B.C.D:9875/jmxrmi

我们已经尝试过:

  1. 添加了-Djava.rmi.server.hostname=A.B.C.D
    -Dcom.sun.management.jmxremote.local.only=false
  2. ProcessBuilder.getEnv() 并添加了我们的环境属性。
  3. 当我们通过命令提示符运行相同的程序时:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9875 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -cp C:\jobs\abc.jar org.springframework.batch.core.launch.support.CommandLineJobRunner
    

    它正在运行,并且能够使用上述相同的 URL 通过远程连接 jmx

欢迎任何建议/解决方法!!!

最佳答案

每个 -D 选项都需要是 ProcessBuilder 的单独参数:

ProcessBuilder pb = new ProcessBuilder("java",
    "-Dcom.sun.management.jmxremote",
    "-Djava.rmi.server.hostname=A.B.C.D",
    // etc. etc.
    "-cp", jobArtifact.getAbsolutePath(),
    "org.springframework.batch.core.launch.support.CommandLineJobRunner");
final Process process = processBuilder.start();

您当前的代码(将所有这些代码连接在一起形成一个参数)本质上是设置一个名为 "com.sun.management.jmxremote -Djava.rmi.server.hostname"的属性 为值 "A.B.C.D -Dcom.sun.management.jmxremote.port=9875 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "(包括尾部空格)。

关于java - PocessBuilder 程序无法远程连接到 JMX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743337/

相关文章:

java - JMX混淆(远程服务器控制)

java - 为什么我的 Java 应用程序在全屏模式下运行如此缓慢? (开窗时很好)

java - 无法在传统tomcat上运行我的SpringBoot项目

使用交替时的 Java 正则表达式优先级

multithreading - SpelExpression 线程安全吗?

java - 并行运行 junit 测试时的竞争条件

java - 为什么 Spring Boot 2.5.0 JMX Beans 没有显示在 JConsole 中

java - 在不关心顺序的情况下对集合进行哈希处理的最有效方法是什么?

spring - Java 嵌入式 jetty 正在接受 HTTP TRACE 方法

java - 我想通过java从主机和jmx端口获取指标