java.lang.SecurityException:期望存根中的sun.rmi.server.UnicastRef2远程引用

时间:2015-07-14 14:25:20

标签: java ubuntu jmx jconsole

我正在尝试使用我的Ubuntu计算机上的JConsole工具连接到在不同计算机上运行的远程Java进程。

这就是我在远程机器上运行Java程序的方法:

  

sudo java -Dcom.sun.management.jmxremote.port = 51082   -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false -jar myfile.jar

我在我的机器上运行JConsole命令,如下所示:

  

jconsole -debug -J-Djava.util.logging.config.file = Logging.properties

这是我的Logging.properties文件:

handlers = java.util.logging.ConsoleHandler

sun.rmi.level=FINEST
.level = INFO

java.util.logging.ConsoleHandler.level = FINEST

java.util.logging.ConsoleHandler.formatter = \

java.util.logging.SimpleFormatter

// Use FINER or FINEST for javax.management.remote.level - FINEST is

// very verbose...

javax.management.level = FINEST

javax.management.remote.level = FINER

现在,在我的Jconsle UI上,我给出了以下属性:

enter image description here

当我点击Connect按钮时,我得到例外说法:

    FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://my-remote-host:51082/jmxrmi] failed to connect: java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference in stub!
    java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference in stub!

This is the complete stacktrace of the exception as per logs:

Jul 14, 2015 7:39:55 PM RMIConnector connect
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://my-remote-host:51082/jmxrmi] connecting...
Jul 14, 2015 7:39:55 PM RMIConnector connect
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://my-remote-host:51082/jmxrmi] finding stub...
Jul 14, 2015 7:39:55 PM sun.rmi.transport.tcp.TCPEndpoint <clinit>
FINE: VMPanel.connect: localHostKnown = true, localHost = 127.0.0.8
Jul 14, 2015 7:39:55 PM sun.rmi.server.UnicastRef newCall
FINE: VMPanel.connect: get connection
Jul 14, 2015 7:39:55 PM sun.rmi.transport.tcp.TCPTransport <init>
FINE: VMPanel.connect: Version = 2, ep = [127.0.0.8:0]
Jul 14, 2015 7:39:55 PM sun.rmi.transport.tcp.TCPEndpoint getLocalEndpoint
FINE: VMPanel.connect: created local endpoint for socket factory null on port 0
Jul 14, 2015 7:39:55 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINE: VMPanel.connect: create connection
Jul 14, 2015 7:39:55 PM sun.rmi.transport.tcp.TCPEndpoint newSocket
FINER: VMPanel.connect: opening socket to [my-remote-host:51082]
Jul 14, 2015 7:39:55 PM sun.rmi.transport.proxy.RMIMasterSocketFactory createSocket
FINE: VMPanel.connect: host: my-remote-host, port: 51082
Jul 14, 2015 7:39:58 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINER: VMPanel.connect: server suggested 10.56.36.2:36585
Jul 14, 2015 7:39:58 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINER: VMPanel.connect: using 127.0.0.8:0
Jul 14, 2015 7:39:58 PM sun.rmi.server.UnicastRef newCall
FINER: VMPanel.connect: create call context
Jul 14, 2015 7:39:58 PM sun.rmi.server.UnicastRef logClientCall
FINER: VMPanel.connect: outbound call: [endpoint:[my-remote-host:51082](remote),objID:[0:0:0, 0]] : sun.rmi.registry.RegistryImpl_Stub[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)
Jul 14, 2015 7:39:58 PM sun.rmi.transport.StreamRemoteCall <init>
FINER: VMPanel.connect: write remote call header...
Jul 14, 2015 7:39:58 PM sun.rmi.transport.StreamRemoteCall getOutputStream
FINER: VMPanel.connect: getting output stream
Jul 14, 2015 7:39:58 PM sun.rmi.server.UnicastRef invoke
FINER: VMPanel.connect: execute call
Jul 14, 2015 7:39:59 PM sun.rmi.transport.StreamRemoteCall getInputStream
FINER: VMPanel.connect: getting input stream
Jul 14, 2015 7:39:59 PM sun.rmi.server.LoaderHandler loadClass
FINE: VMPanel.connect: name = "javax.management.remote.rmi.RMIServerImpl_Stub", codebase = "", defaultLoader = sun.misc.Launcher$AppClassLoader@530f243b
Jul 14, 2015 7:39:59 PM sun.rmi.server.LoaderHandler loadClass
FINER: VMPanel.connect: class "javax.management.remote.rmi.RMIServerImpl_Stub" found via defaultLoader, defined by null
Jul 14, 2015 7:39:59 PM sun.rmi.server.LoaderHandler loadClass
FINE: VMPanel.connect: name = "java.rmi.server.RemoteStub", codebase = "", defaultLoader = sun.misc.Launcher$AppClassLoader@530f243b
Jul 14, 2015 7:39:59 PM sun.rmi.server.LoaderHandler loadClass
FINER: VMPanel.connect: class "java.rmi.server.RemoteStub" found via defaultLoader, defined by null
Jul 14, 2015 7:39:59 PM sun.rmi.server.LoaderHandler loadClass
FINE: VMPanel.connect: name = "java.rmi.server.RemoteObject", codebase = "", defaultLoader = sun.misc.Launcher$AppClassLoader@530f243b
Jul 14, 2015 7:39:59 PM sun.rmi.server.LoaderHandler loadClass
FINER: VMPanel.connect: class "java.rmi.server.RemoteObject" found via defaultLoader, defined by null
Jul 14, 2015 7:39:59 PM sun.rmi.server.UnicastRef done
FINE: VMPanel.connect: free connection (reuse = true)
Jul 14, 2015 7:39:59 PM sun.rmi.transport.tcp.TCPChannel free
FINE: VMPanel.connect: reuse connection
Jul 14, 2015 7:39:59 PM sun.rmi.transport.tcp.TCPChannel free
FINE: VMPanel.connect: create reaper
Jul 14, 2015 7:39:59 PM sun.rmi.server.UnicastRef newCall
FINE: VMPanel.connect: get connection
Jul 14, 2015 7:39:59 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINE: VMPanel.connect: create connection
Jul 14, 2015 7:39:59 PM sun.rmi.transport.tcp.TCPEndpoint newSocket
FINER: VMPanel.connect: opening socket to [127.0.1.1:57675]
Jul 14, 2015 7:39:59 PM sun.rmi.transport.proxy.RMIMasterSocketFactory createSocket
FINE: VMPanel.connect: host: 127.0.1.1, port: 57675
Jul 14, 2015 7:39:59 PM sun.rmi.server.UnicastRef newCall
FINE: RMI RenewClean-[127.0.1.1:57675]: get connection
Jul 14, 2015 7:39:59 PM sun.rmi.transport.tcp.TCPChannel createConnection
FINE: RMI RenewClean-[127.0.1.1:57675]: create connection
Jul 14, 2015 7:39:59 PM sun.rmi.transport.tcp.TCPEndpoint newSocket
FINER: RMI RenewClean-[127.0.1.1:57675]: opening socket to [127.0.1.1:57675]
Jul 14, 2015 7:39:59 PM sun.rmi.transport.WeakRef pin
FINER: VMPanel.connect: strongRef = sun.rmi.transport.DGCImpl@63a1b509
Jul 14, 2015 7:40:00 PM sun.rmi.transport.proxy.RMIMasterSocketFactory createSocket
FINE: RMI RenewClean-[127.0.1.1:57675]: host: 127.0.1.1, port: 57675
Jul 14, 2015 7:40:00 PM sun.rmi.transport.ObjectTable putTarget
FINER: VMPanel.connect: add object [0:0:0, 2]
Jul 14, 2015 7:40:00 PM sun.rmi.transport.ConnectionInputStream done
FINER: VMPanel.connect: send ack
Jul 14, 2015 7:40:00 PM sun.rmi.transport.tcp.TCPChannel newConnection
FINE: VMPanel.connect: reuse connection
Jul 14, 2015 7:40:00 PM sun.rmi.transport.tcp.TCPChannel free
FINE: VMPanel.connect: reuse connection
Jul 14, 2015 7:40:00 PM RMIConnector connect
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://my-remote-host:51082/jmxrmi] failed to connect: java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference in stub!
java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference in stub!
    at javax.management.remote.rmi.RMIConnector.checkStub(RMIConnector.java:1871)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:295)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268)
    at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:357)
    at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:313)
    at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:292)
Jul 14, 2015 7:40:01 PM sun.rmi.server.UnicastRef newCall
FINE: RMI RenewClean-[127.0.1.1:57675]: get connection
Jul 14, 2015 7:40:01 PM sun.rmi.transport.tcp.TCPChannel createConnection

我无法弄清问题在哪里。

更新

我可以连接到我的远程主机以获取给定端口:

telnet my_remote_host 51082

根据this link,我收到了来自主机的回复,没有任何问题。

1 个答案:

答案 0 :(得分:5)

请使用以下设置。我也面临同样的问题,但在设置低于设置后解决了

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.port=9704 
-Djava.rmi.server.hostname=172.18.137.35 
-Dcom.sun.management.jmxremote.rmi.port=970

请注意Djava.rmi.server.hostnameDcom.sun.management.jmxremote.rmi.port

即使在此设置之后,它会询问不安全的连接,请接受它,然后您就可以连接(它会给您错误和failed to connect: java.lang.SecurityException: Expecting a sun.rmi.server.UnicastRef2 remote reference in stub!)。