不能使用JConsole远程连接到weblogic服务器



我需要使用JConsole监视远程机器上运行的weblogic服务器。就目前而言,当我尝试在我的机器上测试一切时,也就是说,我试图使它在我的机器上远程工作,当这起作用时,我会在服务器上进行必要的更改,但由于服务器上的应用程序正在被其他用户使用,我无法进行更改并经常停止/启动服务器。所以,我使用我的pc作为服务器,并使用JConsole"远程"连接。

环境:我的pc和服务器都在运行WL 10.3;我的服务器运行的是Java Sun JDK 1.6.0_27和Solaris操作系统,我的pc运行的是Java Sun JDK 1.6.0_26和Ubuntu操作系统。

我可以本地连接,运行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

连接器服务器地址= service:jmx:rmi://127.0.0.1/stub/ro0abxnyac5qyxzhec5tyw5hz2vtzw50lnjlbw90zs5ybwkuuk1ju2vydmvysw1wbf9tdhviaaaaaaaaaaaaicaab4cgajtas5zzxj2zxiuumvtb3rlt2jqzwn002g0kqxhmx4daab4chc0aatvbmljyxn0umvmmgaacteyny4wljeumqaaxmelhyzsm5p74fdovwyaaaezsm1u10acahg =

connector JMX ready in: service: JMX:rmi:///jndi/rmi://usuario-System-Product-Name:22222/jmxrmi

我也试过这些,但没有成功。

我能够连接的唯一方法是,如果我首先使用pid本地访问,然后在控制台中我得到一个类似于我在日志中得到的服务url:

服务:jmx: rmi://127.0.0.1/存根/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)

在我的应用程序的日志中,我看到以下内容:

connector JMX ready in: 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。usuario-System-Product-Name localhost6。localdomain6 localhost6127.0.1.1 usuario-System-Product-Name

这就是为什么我看到usuario-System-Product-Name而不是ip吗?即使我把电脑的ip设置为主机名?

我禁用了两个防火墙,并尝试了命令行jmx工具,Alex建议购买,但没有运气:-(

)

还有其他建议/技巧/帮助吗

我认为你在一端的防火墙有问题。

因此,首先(如果可能的话)尝试关闭两个防火墙,看看会发生什么。如果它开始工作,检查您必须打开哪些端口。问题是JMX使用2个端口。一个可以配置,另一个是动态选择的。所以,这取决于你的防火墙如何打开它。

另一种可能性是使用命令行jmx工具:通过SSH/telnet终端窗口在服务器运行的同一台机器上本地运行它。我使用了一个这样的应用程序:http://crawler.archive.org/cmdline-jmxclient/downloads.html我发现它运行得很好。

我遇到了同样的问题,我使用端口扫描器扫描了服务器。然后我意识到服务器上的大多数端口默认情况下是对外关闭的。至少在我的组织里是这样。事实上,扫描器显示22是唯一打开的,我想这就是为什么我可以SSH到服务器。您可能需要向您的网络团队澄清"关闭防火墙"的含义,并确保端口(在您的示例中为22222)已打开到您的工作机器。

相关内容

  • 没有找到相关文章

最新更新