7

我在本地 Windows 机器上使用 Java VisualVM 来监控我的远程服务器(Linux)。我能够在 Bisual VM 中获得除“ Visual GC ”之外的所有统计信息。它显示“不支持此 JVM”。我用谷歌搜索了一下,发现可能是因为 jstatd 没有运行和连接。所以执行“ jstatd -J-Djava.security.policy=/tmp/tools.policy ”。它显示了一个 IP“ 175.41.139.225 ”。我不明白为什么它试图连接到这个 ip。它不是我的远程机器的 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
4

3 回答 3

12

在远程服务器上,

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 中使用 Visual GC。

于 2017-02-08T07:42:43.290 回答
6

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

jstatd -J-Djava.rmi.server.hostname=<IP address of shipping_pt machine> -J-Djava.security.policy=/tmp/tools.policy
于 2013-04-27T12:13:26.437 回答
3

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

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

于 2013-04-26T09:58:28.617 回答