无法在Visual VM中查看Visual GC

我在我的本地Windows机器上使用Java VisualVM来监视我的远程服务器(Linux)。 除了“ Visual GC ”之外,我能够获得Bisual VM的所有统计数据。 它显示“不支持此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 

Solutions Collecting From Web of "无法在Visual VM中查看Visual GC"

你是对的,你需要运行jstatd才能使用VisualGC插件,因为VisualGC使用jvmstat API 。 看起来你是以root身份运行jstatd的。 您是否以“root”身份监控应用程序? /tmp/tools.policy文件如何看起来像? 尝试使用以下参数运行jstatd:

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

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

如果无法连接,则需要更改JVM的权限。 注意:你只能默认看到你的进程。

在远程服务器上,

 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内部的VisualVM。