我需要使用JConsole监视在远程计算机上运行的weblogic服务器。就在现在,当我正在尝试我在我的机器上测试所有内容时,我正在尝试使其在我的机器上远程工作,当这工作时,我将在服务器上进行必要的更改,但作为应用程序在服务器正在用于其他用户我无法进行更改并经常停止/启动服务器。所以,我使用我的电脑作为服务器并使用JConsole“远程”连接。
环境:我的电脑和服务器都在运行WL 10.3;服务器使用Java Sun JDK 1.6.0_27和Solaris OS运行,我的电脑运行Java Sun JDK 1.6.0_26和Ubuntu OS。
我可以在本地连接,运行JConsole并单击weblogic进程。
应用程序部署非常大,它运行一些脚本。创建weblogic的域时,我设置以下属性:
java -classpath ${CLASSPATH} ${MY_OPTS} -Dweblogic.management.username=${ADMIN_USER} \
-Dweblogic.management.password=${ADMIN_PASSWD} -Dweblogic.Domain=${MY_DOMAIN} \
-Dweblogic.Name=${MY_SERVER} -Dweblogic.ListenPort=${MY_PORT} \
-Dweblogic.RootDirectory=${MY_DOMAIN_HOME}/${MY_DOMAIN} \
-Dcom.sun.management.jmxremote.port=22222 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.password.file=/home/MY_USER/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/home/MY_USER/jmxremote.access \
-Dweblogic.management.GenerateDefaultConfig=true weblogic.Server &
我还在某个时候添加了这个属性-Djava.rmi.server.hostname = - >我既不使用localhost也不使用127.0.0.1,但它没有任何区别
然后,我从控制台运行jconsole -debug并尝试使用以下服务URL连接远程选项(我尝试不同的一个):
service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi
service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi
service:jmx:rmi://127.0.0.1:22222/jndi/rmi://127.0.0.1:1099/
1099是rmiregistry运行的端口,但是我必须用rmiregistry&amp;手动启动它,否则该端口没有监听。
当应用程序运行时,我运行netstat命令,虽然我看到端口8080,8081(SSL端口)和我的管理控制台的端口(它不是默认的7001)我没有看到端口22222正在侦听,而且我想我应该,对吧?
我甚至在weblogic.policy中添加了以下内容:
grant {
permission java.net.SocketPermission
"<my_ip>:1024-65535", "connect,resolve";
};
在应用程序部署的控制台中,我看到:
Connector Server Address = service:jmx:iiop://<my_ip>:8080 /jndi/weblogic.management.mbeanservers.runtime
Connector Server Address = service:jmx:iiop://:8080 / jndi / weblogic.management.mbeanservers.edit
连接器服务器地址=服务:JMX:RMI://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAxMelHYZki5P74FdoVWYAAAEzsm1U1oACAHg=
Conector JMX准备就绪:服务:jmx:rmi:/// jndi / rmi:// usuario-System-Product-Name:22222 / jmxrmi
我也试过这些但是没有成功。
我能够连接的唯一方法是,如果我首先使用pid在本地访问,那么在控制台中我会得到一个类似于我在日志中获得的服务URL:
服务:JMX:RMI://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAgDBSpbjGvIybrBekgUYAAAEzsm9/YIASAHg=
在远程部分使用这个url我能够连接,它与记录的那个相似但不一样,btw不起作用。
使用-debug时,我在JConsole控制台中遇到的错误是:
我在控制台中遇到的一些错误是,它们不是随机的......我的意思是,当我尝试不同的网址,运行/不能手动运行rmiregistry等时出现不同的错误:
Failed to retrieve RMIServer stub: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
11/11/2011 09:46:46 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi] connecting...
11/11/2011 09:46:46 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi] finding stub...
11/11/2011 09:46:46 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi] Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException:
non-JRMP server at remote endpoint]
Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
17/11/2011 12:08:28 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi] connecting...
17/11/2011 12:08:28 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi] finding stub...
17/11/2011 12:08:28 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi] Failed to retrieve RMIServer stub: javax.naming.NameNotFoundException: jmxrmi
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.NameNotFoundException: jmxrmi
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:340)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:350)
at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:296)
at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:280)
Caused by: javax.naming.NameNotFoundException: jmxrmi
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:99)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1888)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1858)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
... 4 more
注意:当我使用时,我的意思是172.xx.xxx.xxx
我做错了什么?我还应该设置/检查/更改什么?
我有一些变化,但我仍然无法使其发挥作用。
我设置了
java -classpath ${CLASSPATH} ${MY_OPTS} -Dweblogic.management.username=${ADMIN_USER} \ -Dweblogic.management.password=${ADMIN_PASSWD} -Dweblogic.Domain=${MY_DOMAIN} \ -Dweblogic.Name=${MY_SERVER} -Dweblogic.ListenPort=${MY_PORT} \ -Dweblogic.RootDirectory=${MY_DOMAIN_HOME}/${MY_DOMAIN} \ -Djava.rmi.server.hostname=${ADMIN_HOST} \ -Dcom.sun.management.jmxremote.port=22222 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.password.file=/home/MY_USER/jmxremote.password \ -Dcom.sun.management.jmxremote.access.file=/home/MY_USER/jmxremote.access \ -Dweblogic.management.GenerateDefaultConfig=true weblogic.Server &
我将身份验证属性更改为false并添加了java.rmi.server.hostname,其中ADMIN_HOST是设置为我的计算机的ip 172.17.209.66的变量。
当我在JConsole中使用服务URL时:service:jmx:rmi:/// jndi / rmi://172.17.209.66:22222 / jmxrmi
我收到以下异常
22/11/2011 05:22:54 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi] connecting...
22/11/2011 05:22:54 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi] finding stub...
22/11/2011 05:22:54 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi] Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 172.17.209.66; nested exception is:
java.net.ConnectException: Conexión rehusada]
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 172.17.209.65; nested exception is:
java.net.ConnectException: Conexión rehusada]
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:340)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:207)
在我的应用程序的日志中,我看到以下内容:
Conector JMX准备就绪:服务:jmx:rmi:/// jndi / rmi:// usuario-System-Product-Name:22222 / jmxrmi
/ etc / hosts显示:
172.17.209.65 usuario-System-Product-Name#由NetworkManager添加 127.0.0.1 localhost.localdomain localhost :: 1 usuario-System-Product-Name localhost6.localdomain6 localhost6 127.0.1.1 usuario-System-Product-Name
这就是为什么我看到usuario-System-Product-Name而不是ip?即使我将主机名设置为我的计算机的IP?
我禁用了两个firewals并尝试命令行jmx工具Alex建议购买没有运气: - (
其他任何建议/提示/帮助?
答案 0 :(得分:-1)
我认为您在其中一端遇到防火墙问题。
因此,首先(如果可能的话)尝试关闭两个防火墙,看看会发生什么。如果它开始工作,请检查您必须打开哪些端口。问题是JMX使用2个端口。您可以配置一个,动态选择其他一个。所以,这取决于您的防火墙如何打开它。
其他可能性是使用命令行jmx工具:在服务器通过SSH / telnet终端窗口运行的同一台机器上本地运行它。 我使用了一个这样的应用程序:http://crawler.archive.org/cmdline-jmxclient/downloads.html 并且看到它工作得很好。
答案 1 :(得分:-1)
我遇到了同样的问题,我使用端口扫描程序扫描了服务器。然后我意识到默认情况下服务器上的大多数端口都关闭到外部。至少在我的组织中就是这种情况。事实上,扫描仪说22是唯一打开的,我猜这就是我可以SSH到服务器的原因。您可能希望向您的网络团队澄清“封闭防火墙”的含义,并确保将端口(在您的情况下为22222)打开到您的工作机器。