Monitoring 无法将远程主机连接到VisualVM

Monitoring 无法将远程主机连接到VisualVM,monitoring,jmx,visualvm,Monitoring,Jmx,Visualvm,我是Java新手,在将远程主机连接到JVisualVM时遇到了一个问题 java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name 我已经搜索了互联网,并按照上面提到的所有步骤进行了操作,

我是Java新手,在将远程主机连接到
JVisualVM
时遇到了一个问题

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
我已经搜索了互联网,并按照上面提到的所有步骤进行了操作,但仍然无法解决这个问题。我遵循的步骤是:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
  • 我首先在
    $JAVA\u HOME/bin
    中创建了一个
    jstatd.all.policy
    文件,从而在远程服务器上启动了jstatd。该文件包含:
    grantcodebase”文件:${java.home}/./lib/tools.jar“{permission java.security.AllPermission;}

  • java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  • 我启动了
    Jstatd
    作为
    Jstatd-J-Djava.security.policy=Jstatd.all.policy

  • java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  • 我在远程主机上启动了Java应用程序,如下所示:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  • 然后,我开始在本地机器上作为
    JVisualVM
    的实例,当我添加远程主机时,它连接了,但我无法看到任何Java进程

  • java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    谁能帮我一下吗

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    

    谢谢

    要连接到远程VM您必须使用特定选项启动该远程VM

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    java
     -Dcom.sun.management.jmxremote
     -Dcom.sun.management.jmxremote.port=9000
     -Dcom.sun.management.jmxremote.ssl=false
     -Dcom.sun.management.jmxremote.authenticate=false
    class
    
    启动VM后,转到您的VisualVM并执行以下操作:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  • 文件->添加JMX连接
  • 键入:yourHostName:9000,然后单击OK
  • 在左侧,您将添加JMX连接,双击它,就这样
    可以找到有关Java监视和管理平台的更多详细信息。

    我在连接Glassfish应用程序服务器时遇到了类似的问题。请查看对我有效的解决方案,因为它们对您同样有效:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    • 尝试在应用程序上设置:

      java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
      
      -Djava.rmi.server.hostname=*远程服务器外部IP地址*
    提到的IP地址应该是服务器外部IP(听起来可能很傻,但对我来说很有用)。我的例子中的主要问题是JMX指向本地主机和循环。在配置文件中,应将确切的IP地址设置为远程主机。我在书中把它描述为“问题2”

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    • 如果防火墙阻塞是一个问题,那么我建议尝试使用SSH隧道进行XMing(设置起来很简单)。如果设置时遇到问题,请参阅以下说明:
      使用XMing的最大优点是,它几乎总是在启用SSH时工作。您只需将VisualVM文件放在远程主机上,然后从命令行运行它。XWindow将在本地计算机上显示VisualVM窗口

    • java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
      
    • 有可能是VisualVM问题-尝试使用其他工具来验证错误。我推荐JConsole。它的工作原理与VisualVM类似,我还描述了

    • java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
      

    您需要使用指向服务器外部IP或主机名的附加选项启动jstatd:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    statd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=my_server_ip/hostname
    

    回答基于:

    以下是执行此操作的步骤:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  • 以这种方式在远程主机中启动(在ejstatd文件夹中):
    mvn exec:java-Djava.rmi.server.hostname=-Dexec.args=“-pr 1099-ph 1100-pv 1101”
    (用于“jstatd”类型的连接)(如果远程主机的主机名与您从本地网络看到的主机名不匹配,则仅指定
    -Djava.rmi.server.hostname
  • 使用以下附加Java参数启动Java应用程序:
    -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.port=1102-Dcom.sun.management.jmxremote.rmi.port=1102-Djava.rmi.server.hostname=
    (用于“JMX”类型连接)(与前面关于
    -Djava.rmi.server.hostname的注释相同)
  • 打开远程主机上的这4个端口,使它们可供本地计算机使用:
    1099
    1100
    1101
    1102
  • 启动JVisualVM
  • 右键单击“远程”>“添加远程主机…”并在“主机名”中输入您的远程主机名(如果您不使用端口
    1099
    ,您可以在“高级设置”中对此进行更改)
  • 右键单击刚刚创建的远程主机>“添加JMX连接…”,并在“连接”输入中输入“
    :1102
    ”,然后选中“不需要SSL连接”
  • 您的Java进程将出现两次:一个来自“jstatd”连接类型,另一个来自“JMX”连接类型
  • 免责声明:我是开源工具的作者。

    在需要监视的服务器上启动,并将
    VisualVM
    连接到jstatd端口,步骤如下:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    步骤1:创建
    启动jstatd.sh
    并复制以下内容:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    nohup jstatd -p 1099 -J-Djava.security.policy=<(echo 'grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};') &
    
    步骤3:启动jstatd:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    $ sh start-jstatd.sh
    
    步骤4:
    VisualVM
    中添加远程主机:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
    步骤5:JMX连接添加到远程主机,如下图所示,然后单击确定按钮:

    编辑您的问题更简单……我使用您提到的步骤执行了java应用程序,但它仍然没有显示我添加的远程主机下的任何java进程。当我尝试添加jmx连接时,日志文件中会出现以下错误:**connect(服务:jmx:rmi:///jndi/rmi://10.88.36.146:9000/jmxrmi)java.net.ConnectException:连接被拒绝:**检查两台计算机上的防火墙…可能不允许通过端口9000进行通信…我已禁用本地计算机上的防火墙,远程主机上的IP表设置为:
    链输入(策略接受)目标保护选项源目标链转发(策略接受)目标保护选项源目标链输出(策略接受)target prot opt source destination
    google搜索一下如何查看允许哪些端口
    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name