Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to view Visual GC in VisualVM

I am using Java VisualVM on my local windows machine to monitor my remote server(Linux). I am able to get all stats in Bisual VM except "Visual GC". It shows "Not Supported for this JVM". I have googled it and find that it might be because jstatd is not running and connected. So executed "jstatd -J-Djava.security.policy=/tmp/tools.policy". It shows a ip "175.41.139.225". I can't understand why it is trying to connect to this ip. It is not the ip of my remote machine nor of my local machine.

[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
like image 257
ajay Avatar asked Apr 26 '13 09:04

ajay


2 Answers

On remote server,

vim /tmp/tools.policy

Add,

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

And start jstatsd

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

and you ready are with Visual GC inside VisualVM on local machine.

like image 177
Hemant Thorat Avatar answered Oct 07 '22 23:10

Hemant Thorat


You are right that you need to run jstatd to be able to use VisualGC plugin, because VisualGC uses jvmstat API. It looks like you are running jstatd as root. Is you monitored application running as 'root'? How does /tmp/tools.policy file looks like? Try to run jstatd with the following args:

jstatd -J-Djava.rmi.server.hostname=<IP address of shipping_pt machine> -J-Djava.security.policy=/tmp/tools.policy
like image 34
Tomas Hurka Avatar answered Oct 07 '22 23:10

Tomas Hurka