Не удается подключиться к серверу weblogic удаленно с помощью JConsole - PullRequest
2 голосов
/ 17 ноября 2011

Мне нужно следить за сервером weblogic, работающим на удаленной машине, используя JConsole.Пока что, пока я пытаюсь, я тестирую все на своем компьютере, то есть я пытаюсь заставить его работать удаленно на моем компьютере, когда это сработает, я внесу необходимые изменения на сервере, но как приложение насервер используется для других пользователей. Я не могу вносить изменения и часто останавливать / запускать сервер.Итак, я использую свой компьютер в качестве сервера и для «удаленного» подключения с помощью JConsole.

Среда: и мой компьютер, и сервер работают с WL 10.3;сервер работает с Java Sun JDK 1.6.0_27 и ОС Solaris, а мой компьютер работает с 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

Адрес сервера соединителя = служба: jmx: iiop: //:8080 / JNDI / масeblogic.management.mbeanservers.edit

1026 * Разъем Адрес сервера = обслуживание: JMX: RMI: //127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAxMelHYZki5P74FdoVWYAAAEzsm1U1oACAHg=

Conector JMX готов: обслуживание: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 в удаленном разделе, я могу подключиться, он похож, но не совпадает с тем, что зарегистрировано, что, кстати, не работает.

Ошибки, которые я получаю в консоли JConsole при использовании -debug:

Некоторые из ошибок, которые я получил в консоли, не случайны. Я имею в виду разные ошибки, когда я пробовал разные 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 моего компьютера..

Когда я использовал URL-адрес службы в JConsole: 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 готов к работе: служба: 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

, поэтому я вижу имя-системы-продукта-имени пользователя, а не ip? Даже если я установил в качестве имени хоста ip моего компьютера?

Я отключил оба firewals и попробовал инструмент командной строки jmx, который Алекс предложил купить без удачи: - (

Любые другие предложения / советы / помощь?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2013

Я столкнулся с той же проблемой, и я сделал сканирование сервера с помощью сканера портов. И тогда я понял, что большинство портов на сервере по умолчанию закрыты снаружи. По крайней мере, так обстоит дело в моей организации. На самом деле, сканер говорит, что открыт только 22, и я думаю, именно поэтому я могу SSH к серверу. Возможно, вы захотите уточнить у своей сетевой команды, что это означает «закрытые брандмауэры», и убедитесь, что порт (22222 в вашем случае) включен для вашей рабочей машины.

0 голосов
/ 17 ноября 2011

Я думаю, что у вас проблемы с брандмауэром на одном из концов.

Итак, сначала (если это возможно) попробуйте закрыть оба брандмауэра и посмотреть, что произойдет. Если он начал работать, проверьте, какие порты вы должны открыть. Проблема в том, что JMX использует 2 порта. Один вы можете настроить, другой выбирается динамически. Таким образом, это зависит от вашего брандмауэра, как вы можете открыть его.

Другая возможность - использовать инструмент командной строки jmx: запустить его локально на той же машине, где сервер работает через окно терминала SSH / telnet. Я использовал одно такое приложение: http://crawler.archive.org/cmdline-jmxclient/downloads.html и увидел, что он работает вполне нормально.

...