Для этого добавляю в параметры запуска java-машины
-Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false . В результате сервер запускается с JMX-агентом, к которому можно подключиться с помощью JConsole.После успешных экспериментов с JConsole я настроил выгрузку данных в cacti. Для этого использовал jmxtrans. Он делает запрос к серверу, получает данные и сохраняет и в архив. Всё замечательно...
Проблемы начались при попытке подключиться к JMX-агенту на боевом сервере. Параметры добавил, перезагрузил...
JConsole подключаться не хочет:
Connection failed: Retry?
The connection to mygameserver.ath.cx:3333 did not succeed.
Would you like to try again?
Без объяснения причин.
Попробовал подсоединиться с помощью VisualVM. В результате в логе исключение:
INFO [com.sun.tools.visualvm.jmx.impl.JmxModelImpl]: connect(service:jmx:rmi:///jndi/rmi://mygameserver.ath.cx:3333/jmxrmi)
java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:352)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:809)
Caused: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:828)
...
jmxtrans выдает следующее исключение:
[15 фев 2011 18:28:13] 930 ERROR (com.googlecode.jmxtrans.util.JmxUtils:348) - Problem processing queries for server: mygameserver.ath.cx:3333
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
...Какой ещё 127.0.1.1? Зачем он пытается подсоединиться к локальной машине?
При этом если сервер отключить, выдается другое сообщение:
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: mygameserver.ath.cx; nested exception is:
java.net.ConnectException: Connection refused]
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:342)
...Полдня шаманства с файрволом ничего не дали: порт открыт, подключение к нему телнетом проходит.
Вооружившись сниффером, я обнаружил, что при общении jmx-клиента с сервером соединение все-таки создается, но почти сразу обрывается... Причем в данных, перехваченных сниффером, в явном виде присутствует строка "127.0.1.1", которую сервер передает клиенту...
Тогда я начал сравнивать, чем отличаются два сервера, на одном из которых всё работает, а на другом - нет (оба сервера работают под Ubuntu).
Там где работает:
user@cs:~$ hostname -i
188.93.32.114а на том, где не работает:
user@cs:~$ hostname -i
127.0.0.1Оказывается, всё дело было в ip сервера, возвращаемого системой по имени компьютера.
Для этого надо было исправить одну строчку в /etc/hosts.
Было:
127.0.0.1 localhost 127.0.0.1 cs2621Стало:
127.0.0.1 localhost 188.93.32.114 cs2621После этого надо было перезагрузить java-приложение, которое мониторилось - и всё заработало! И JConsole, и VisualVM, и jmxtrans!

Комментариев нет:
Отправить комментарий