我需要使用 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 & 手动启动它,否则该端口没有监听。
当应用程序运行时,我运行 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
连接器服务器地址 = service:jmx:iiop://:8080/jndi/weblogic.management.mbeanservers.edit
Connector Server Address = service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAxMelHYZki5P74FdoVWYAAAEzsm1U1oACAHg=
连接器 JMX 准备就绪:service:jmx:rmi:///jndi/rmi://usuario-System-Product-Name:22222/jmxrmi
我也尝试了这些,但没有成功。
我能够连接的唯一方法是,如果我首先使用 pid 在本地访问,然后在控制台中我得到一个类似于我在日志中得到的服务 url:
service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAgDBSpbjGvIybrBekgUYAAAEzsm9/YIASAHg=
在我能够连接的远程部分中使用这个 url,它与记录的那个相似但不一样,顺便说一句,它不起作用。
使用 -debug 时我在 JConsole 控制台中遇到的错误是:
我在控制台中遇到的一些错误是,它们不是随机的。我的意思是,当我尝试不同的 url、手动运行/不运行 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)
在我的应用程序日志中,我看到以下内容:
连接器 JMX 准备就绪:service: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 设置为主机名?
我禁用了两个防火墙并尝试使用命令行 jmx 工具 Alex 建议购买但没有运气:-(
还有其他建议/提示/帮助吗?