无法在VisualVM的观看视觉GC(Unable to view Visual GC in Vis

2019-09-01 04:25发布

我用我的本地Windows计算机上的Java VisualVM的监视我的远程服务器(Linux)的。 我能够得到Bisual VM的所有统计数据,除了“ 视觉GC”。 它显示“不支持此JVM”。 我用Google搜索它,发现它可能是因为jstatd没有运行和连接。 因此,执行“jstatd -J-Djava.security.policy =的/ tmp / tools.policy”。 它显示了一个IP“175.41.139.225”。 我不明白为什么它正试图连接到该IP。 这不是我的远程机器,也不是我的本地计算机的IP地址。

[root@shipping_pt mail]# jstatd -J-Djava.security.policy=/tmp/tools.policy
Could not contact registry
Connection refused to host: 175.41.139.225; nested exception is:
        java.net.ConnectException: Connection refused
java.rmi.ConnectException: Connection refused to host: 175.41.139.225; nested exception is:
        java.net.ConnectException: Connection refused
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at java.rmi.Naming.rebind(Naming.java:177)
        at sun.tools.jstatd.Jstatd.bind(Jstatd.java:57)
        at sun.tools.jstatd.Jstatd.bind(Jstatd.java:66)
        at sun.tools.jstatd.Jstatd.main(Jstatd.java:143)
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
        at java.net.Socket.connect(Socket.java:546)
        at java.net.Socket.connect(Socket.java:495)
        at java.net.Socket.<init>(Socket.java:392)
        at java.net.Socket.<init>(Socket.java:206)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
        ... 8 more

Answer 1:

在远程服务器上,

vim /tmp/tools.policy

加,

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

并开始jstatsd

jstatd -J-Djava.security.policy=/tmp/tools.policy -J-Djava.rmi.server.hostname=<public_ip>

你准备好与内部VisualVM的视觉GC本地机器上。



Answer 2:

你是正确的,你需要运行jstatd能够使用visualgc的插件,因为visualgc的使用jvmstat API 。 它看起来像你的根runnign jstatd。 是您监视应用程序中运行以“根”? 如何/tmp/tools.policy文件的样子? 尝试用以下ARGS运行jstatd:

jstatd -J-Djava.rmi.server.hostname=<IP address of shipping_pt machine> -J-Djava.security.policy=/tmp/tools.policy


Answer 3:

VsiualVM非常依赖版本。 如果您可以连接,但某些功能不可用,我会确保你运行的是完全的Java版本相同。

如果您无法连接,你需要改变你的JVM的权限。 注意:您只能在默认情况下看到您的流程。



文章来源: Unable to view Visual GC in VisualVM