2

我需要使用 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 建议购买但没有运气:-(

还有其他建议/提示/帮助吗?

4

2 回答 2

-1

I think that you have problems with firewall on one of the ends.

So, first (if it is possible) try to close both firewalls and see what happens. If it started to work check which ports do you have to open. The problem is that JMX uses 2 ports. One you can configure, other one is chosen dynamically. So, it depends on your firewall how can you open it.

Other possibility is to use command line jmx tool: run it locally on the same machine where server is running through SSH/telnet terminal window. I used one such application: http://crawler.archive.org/cmdline-jmxclient/downloads.html and saw that it works quite fine.

于 2011-11-17T19:17:25.783 回答
-1

我遇到了同样的问题,我使用端口扫描仪对服务器进行了扫描。然后我意识到服务器上的大多数端口默认情况下都是对外部关闭的。至少在我的组织中是这样。事实上,扫描仪说 22 是唯一打开的,我想这就是我可以通过 SSH 连接到服务器的原因。您可能想与您的网络团队澄清“封闭防火墙”的含义,并确保端口(在您的情况下为 22222)已打开到您的工作机器。

于 2013-11-08T21:27:19.657 回答