java - 无法使用JConsole远程连接到weblogic服务器

标签 java weblogic ioexception jconsole

我需要使用JConsole监视在远程计算机上运行的Weblogic服务器。暂时来说,当我尝试测试计算机上的所有内容时,就是试图使它在计算机上远程运行,当此方法有效时,我将在服务器上进行必要的更改,但将应用程序置于服务器正在被其他用户使用,我无法进行更改并经常停止/启动服务器。因此,我将PC用作服务器,并使用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

连接器服务器地址=服务:JMX:RMI://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAxMelHYZki5P74FdoVWYAAAEzsm1U1oACAHg=

可以在以下位置使用Conector JMX:service:jmx:rmi:/// jndi / rmi:// usuario-System-Product-Name:22222 / jmxrmi

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

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

服务:JMX:RMI://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAgDBSpbjGvIybrBekgUYAAAEzsm9/YIASAHg=

使用我可以连接的远程部分中的该url,它与记录的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)


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

可以在以下位置使用Conector JMX:service:jmx:rmi:/// jndi / rmi:// usuario-System-Product-Name:22222 / jmxrmi

/ etc / hosts显示:


  172.17.209.65 usuario-系统-产品名称#由NetworkManager添加
  127.0.0.1 localhost.localdomain localhost :: 1 usuario系统产品名称localhost6.localdomain6 localhost6
  127.0.1.1 usuario-系统-产品名称


这就是为什么我看到usuario-System-Product-Name而不是IP的原因?即使将主机名设置为计算机的IP?

我禁用了两个firewals,并尝试使用命令行jmx工具Alex建议不要运气:-(

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

最佳答案

我认为您在一端遇到了防火墙问题。

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

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

关于java - 无法使用JConsole远程连接到weblogic服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172470/

相关文章:

java - EJB 客户端找不到在 WebLogic 管理控制台中测试成功的数据源

tomcat - 从 Tomcat 迁移到 Weblogic 10.3 时指定资源

JAVA RandomAccessFile 构造时抛出 IOException

java - 在 Java 中,为什么 FileWriter 抛出 IOException 而 FileOutputStream 抛出 FileNotFoundException 的原因完全相同

java - 适配器图案和包装

java - Weblogic Resteasy 部署问题

java - 在JAVA中执行linux命令行

java - 分析从 Java 文件中读取的文本

java - 两个给定日期之间的天数

java - RecyclerView 根本不显示。我找不到错误。我该如何解决?