Назад | Перейти на главную страницу

Не удается подключиться через удаленный JMX

Я попытался включить удаленное взаимодействие JMX в приложении Java, запущенном на сервере, добавив аргументы JVM -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx, но мне не удалось подключиться к приложению. Не зная, что приложение что-то испортило, я написал простое тестовое приложение:

public class Main {
    public static void main(String[] args) {
        while (true) {
            try {
                System.out.println("Sleeping for 5 seconds...");
                Thread.sleep(5000);
            }
           catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Однако мне тоже не удалось подключиться к этому приложению. iptables показывает открытый порт на 9001, а netstat подтверждает, что соединение установлено, но Jconsole (и простой скрипт Groovy) не работает из-за тайм-аута.

Поскольку до сих пор не удалось устранить неполадки, я искал альтернативные способы подключения Jconsole. Решения включают установку нового веб-сервера и маршрутизацию JMX через него, но, вероятно, для меня это невозможно. В коробке есть веб-сервер, но это Hiawatha, и я не могу его изменить или установить другой. Что я пропустил?

Попробуйте выполнить следующие действия, чтобы устранить неполадки и сообщить об этом:

  1. Вы можете использовать telnet xxx.xxx.xxx.xxx 9001 откуда вы запускаете jconsole. Тебе следует увидеть:

    Подключен к xxx.xxx.xxx.xxx Escape-символ - '^]'.

Если вы это видите, значит, у вас есть TCP-соединение, поэтому проблема не в брандмауэрах.

  1. Выполните следующую команду на сервере и опубликуйте вывод:

    $ netstat -an | grep LISTEN | grep 9001 tcp6 0 0 ::: 9001 ::: * СЛУШАТЬ

Ваш класс и ваша командная строка:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Main

у меня работает нормально, я могу подключиться к jconsole.

  1. Можете ли вы проверить, какая версия Java работает на хосте, который вы хотите отслеживать? java -version