无法在ubuntu服务器上启动jstatd

时间:2013-06-30 20:28:59

标签: rmiregistry jstatd

我想设置两个运行jstatd的服务器,这样我就可以动态监控我的应用程序。 Web服务器已经启动并运行,但是另一台服务器总是会遇到这样的例外情况。

  

无法将/ JStatRemoteHost绑定到RMI注册表   java.rmi.ServerException:服务器线程中发生RemoteException;   嵌套异常是:java.rmi.UnmarshalException:错误   解组论证;嵌套异常是:     抛出java.lang.ClassNotFoundException:   sun.jvmstat.monitor.remote.RemoteHost(没有安全管理器:RMI类   装载机禁用)   sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)     在   sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)     在sun.rmi.transport.Transport $ 1.run(Transport.java:177)at   sun.rmi.transport.Transport $ 1.run(Transport.java:174)at   java.security.AccessController.doPrivileged(Native Method)at   sun.rmi.transport.Transport.serviceCall(Transport.java:173)at   sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)     在   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:808)     在   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport.java:667)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:722)at   sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)     在   sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)     在sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)at   sun.rmi.registry.RegistryImpl_Stub.rebind(未知来源)at   java.rmi.Naming.rebind(Naming.java:177)at   sun.tools.jstatd.Jstatd.bind(Jstatd.java:57)at   sun.tools.jstatd.Jstatd.main(Jstatd.java:143)引起:   java.rmi.UnmarshalException:错误解组参数;嵌套   异常是:java.lang.ClassNotFoundException:   sun.jvmstat.monitor.remote.RemoteHost(没有安全管理器:RMI类   装载机禁用)   sun.rmi.registry.RegistryImpl_Skel.dispatch(未知来源)at   sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)     在   sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)     在sun.rmi.transport.Transport $ 1.run(Transport.java:177)at   sun.rmi.transport.Transport $ 1.run(Transport.java:174)at   java.security.AccessController.doPrivileged(Native Method)at   sun.rmi.transport.Transport.serviceCall(Transport.java:173)at   sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)     在   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:808)     在   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport.java:667)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:722)引起:   抛出java.lang.ClassNotFoundException:   sun.jvmstat.monitor.remote.RemoteHost(没有安全管理器:RMI类   装载机禁用)   sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:554)     在   java.rmi.server.RMIClassLoader中的$ 2.loadProxyClass(RMIClassLoader.java:646)     在   java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:311)     在   sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:263)     在   java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1556)     在   java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1512)     在   java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)     在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)     ......还有13个

我确定jstatd加载了内容为

的策略文件
  

授予代码库“file:$ {java.home} /../ lib / tools.jar”{permission   java.security.AllPermission; };

我无法想象问题是什么来的,请帮助。

1 个答案:

答案 0 :(得分:5)

我和你有同样的问题。

据我所知, rmi注册表方面发生异常,因为它无法找到位于内的 sun.jvmstat.monitor.remote.RemoteHost 类强>的tools.jar

在我的情况下,解决方案是在启动 rmiregistry 时指定 java.rmi.server.codebase 属性。指定codebase属性后问题就消失了。 请尝试使用以下Linux / Solaris命令启动 rmiregistry

  

rmiregistry的   -J-Djava.rmi.server.codebase = file:$ {java.home} /../ lib / tools.jar&

或Windows(虽然我没有完全测试)

  

启动rmiregistry   -J-Djava.rmi.server.codebase = “%JAVA_HOME%/ .. / LIB / tools.jar中”

希望它会对你有所帮助。