Memory management 无法使用JStat连接到远程JVM

Memory management 无法使用JStat连接到远程JVM,memory-management,jvm,heap,jvm-hotspot,jstat,Memory Management,Jvm,Heap,Jvm Hotspot,Jstat,通过Jstat,Jstat可以连接到本地和远程JVM。URI的格式可以是 [protocol:][//]lvmid[@hostname[:port]/servername] 我在一台启用了JMX的服务器(CentOS)上运行了一个JVM- xyz 23878 1 0 Jun01 ? 04:37:00 java -Xms1g -Xmx1g -XX:NewSize=512m -Xloggc:../9301/logs/gc.log -verbose:gc -XX:+Pr

通过Jstat,Jstat可以连接到本地和远程JVM。URI的格式可以是

 [protocol:][//]lvmid[@hostname[:port]/servername]
我在一台启用了JMX的服务器(CentOS)上运行了一个JVM-

xyz   23878     1  0 Jun01 ?        04:37:00 java -Xms1g -Xmx1g -XX:NewSize=512m -Xloggc:../9301/logs/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../9301/logs/oom.log **-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=19301 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false** -jar ../0.1.14/xyz-0.1.14.jar -serviceName <name> -dataCenter <name> servicePort 9301
xyz 23878 01年6月10日?04:37:00 java-Xms1g-Xmx1g-XX:NewSize=512m-Xloggc:../9301/logs/gc.log-verbose:gc-XX:+printgcdatastamps-XX:+printgDetails-XX:+heapdumponutofmemoryError-XX:HeapDumpPath=../logs/oom.log**-Dcom.sun.management.jmxremote=true-Dcom.sun.management.jmxremote=19301-Dcom.sun.management.management.jmxremote=false-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.local.only=false**-jar../0.1.14/xyz-0.1.14.jar-serviceName-dataCenter servicePort 9301
我能够使用使用两步流程的JVisualVM从本地机器连接到JVM-

  • 提示通过默认端口1099上的jstatd连接添加远程计算机->我可以这样做,并且添加了服务器,证明RMI注册表可用
  • 添加服务器后,您可以在exposed端口->Success上向JVM添加JMX连接,因为JMX是由我的程序在端口19301上公开的,我可以查看详细信息
  • 然而,我不能将jstat用于同样的目的

    运行jstat-gc进程_id@servername给我下面的例外-

    RMI Registry not available at <servername>:1099
    Connection refused to host: <servername>; nested exception is: 
        java.net.ConnectException: Connection refused
    
    RMI注册表在以下位置不可用:1099
    拒绝连接到主机:;嵌套异常是:
    java.net.ConnectException:连接被拒绝
    
    通过网络查看了各种来源,他们讨论了使用jstatd 运行,我相信它正在运行,因为VisualVM能够添加机器

    问题:我应该如何在jstat命令中设置[vmid]部分的框架以连接您需要在远程主机上运行才能使用
    jstat

    只有运行RMI注册表是不够的。注册表仅用于注册各种RMI服务
    -Dcom.sun.management.jmxremote
    选项启动
    jmxrmi
    服务(适用于VisualVM),但jstat查找
    JStatRemoteHost
    服务


    一旦启动了
    jstatd
    ,使用
    jstat-options流程_id@servername
    用于监视远程VM的命令。

    非常感谢@apangin我在服务器上启动了jstatd,它成功了。我能够通过jstat-root 2343819717 0 00:11 pts/1 00:00:00 jstatd-J-Djava.security.policy=all.policy all.policy具有以下内容-grant codebase“文件:/opt/jdk/lib/tools.jar”{permission java.security.AllPermission;};关键是要确保策略文件中的文件:应该具有正确的路径。jstatd文档提供了一个在我的案例中不需要的通用示例