Подключитесь к серверу Tomcat в той же подсети с помощью Java JMX - PullRequest
3 голосов
/ 17 июня 2011

У меня проблема с подключением Tomcat JMX. У меня есть два хоста (то есть host1.mydomain.com, host2.mydomain.com), которые подключены к одной подсети. На обеих этих машинах JmxRemoteLifecycleListener работает

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10010" rmiServerPortPlatform="10011"/>

Как пользователь, я хочу общаться с Tomcat через Java JMX. Со стороны я могу успешно подключиться и правильно видеть атрибуты. URL, с которым я соединяюсь:

service:jmx:rmi://host1.mydomain.com:10011/jndi/rmi://host1.mydomain.com:10010/jmxrmi

Но если я хочу подключиться с одного хоста к Tomcat на другом хосте через jmx (service:jmx:rmi://host2:10011/jndi/rmi://host2:10010/jmxrmi), это не сработает. Время соединения истекло:

java.rmi.ConnectException: Connection refused to host: ip-adress from host1; nested exception is:
    java.net.ConnectException: Connection timed out
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110)
    at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
    at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2327)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:279)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
    at com.myjmx.jmxtest.montor.Monitor.getInformation(Monitor.java:52)
    at com.myjmx.jmxtest.Start.main(Start.java:39)
Caused by: java.net.ConnectException: Connection timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
    ... 9 more

В строке 52 в Monitor.java находится JMXConnector:

JMXConnector connector = JMXConnectorFactory.connect(url, environment);

Другие порты, такие как service:jmx:rmi:///jndi/rmi://host1:9008/jmxrmi, работают правильно. Но я не могу подключиться к порту 10010 (порт Tomcat) с этим более коротким URL-адресом выше service:jmx:rmi:///jndi/rmi://host1:10010/jmxrmi

Также на Tomcat работает зонд.

Я не знаю, в чем может быть причина. Я думаю, что это проблема Tomcat, что порт отключен в той же подсети или что-то вроде этого. Но я не знаю, как включить порт.

У кого-нибудь есть решение или такая же проблема?

Edit:

Tomcat настроен так: Tomcat 6, JMX и проблема с динамическим портом

Обновление: Я думаю, что нашел причину проблемы. На сервере установлены две сетевые карты. Но я могу активировать только один NIC для JMX Tomcat. Есть ли способ активировать оба NIC? Так я могу подключиться снаружи и изнутри? Я не знаю, может быть, с помощью разных портов? Таким образом, -Djava.rmi.server.hostname = $ IP работает на обычном порту, а java.rmi.server.useLocalHostname запускается, например, на 3333.

Спасибо

spinner0815

...