[英]Can't connect to weblogic server remotely using 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建議不要運氣:-(
還有其他建議/技巧/幫助嗎?
我遇到了同樣的問題,並使用端口掃描程序對服務器進行了掃描。 然后我意識到默認情況下,服務器上的大多數端口都對外部不開放。 至少在我的組織中就是這種情況。 實際上,掃描儀說22是打開的唯一設備,我想這就是我可以SSH到服務器的原因。 您可能需要與您的網絡團隊一起澄清“封閉式防火牆”的含義,並確保已將端口(在您的情況下為22222)打開到工作計算機上。
我認為您在一端遇到了防火牆問題。
因此,首先(如果可能)嘗試關閉兩個防火牆,然后看看會發生什么。 如果開始工作,請檢查您必須打開哪些端口。 問題是JMX使用2個端口。 您可以配置一個,另一個是動態選擇的。 因此,如何打開防火牆取決於您的防火牆。
其他可能性是使用命令行jmx工具:在通過SSH / telnet終端窗口運行服務器的同一台計算機上本地運行它。 我使用了一個這樣的應用程序: http : //crawler.archive.org/cmdline-jmxclient/downloads.html ,發現它運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.