Я хотел бы использовать приложение visualvm через туннель ssh (для машины EC2) с помощью jmx ИЛИ jstatd. Как мне это сделать? Вот список того, что было опробовано (и не удалось): (BTW: если визуальный vm не подходит, как мне найти утечки памяти на удаленной машине?)
jstatd: попытка:
Я установил сервер jstatd на машине EC2 (приложение уже было запущено на нем) Затем я настроил локальный порт 3333 туннеля на удаленный порт 1099 В VisualVM я попытался подключиться с помощью jstatd на порт 3333 ... ни один из процессов на EC2 не появился
В этой ссылке говорится, что jstatd открывает другой порт: http://rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm ... поэтому я туннелировал этот порт с локального хоста на удаленный. Я перезапустил визуальный vm... еще ничего
Когда я попытался перечислить процессы, запущенные из EC2, используя следующую команду:
jps -l -m -v rmi://localhost
... Я получил список процессов
Когда я перечислил его на своей домашней машине, используя
jps -l -m -v rmi://localhost:3333
.... У меня нет! Итак, порт rmi не туннелируется с портом jstatd (3333)...?
попытка jmx:
Я запустил приложение на удаленном компьютере со следующей командой:
java -Dcom.sun.management.jmxremote.port=3333 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false\
-cp :post/* <appName>
... приложение работает, поэтому я туннелировал локальный порт 3333 на удаленный 3333
Затем я попытался настроить ссылку jmx на localhost: 3333 из визуального интерфейса vm: ... он выдает сообщение об ошибке:
cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi
Если мне нужно настроить ссылку на удаленный RMI-сервер, я не уверен, как это сделать.
попытка JMXMP:
Это обещание, но что-то не так:
Сначала я добавил jmx_remote jar в путь к классам и запустил приложение на удаленном компьютере, используя ту же команду, что и в случае JMX, который я показал выше. Я нашел банку в ссылка для скачивания oracle
Я настроил туннель ssh из локального порта 3333 на удаленный порт 3333. Затем я запустил visualvm с тем же файлом jmx_remote в calsspath.
visualvm -cp:a ~/jmx/jmxremote_optional.jar
Затем я попытался подключить visualvm к удаленному серверу с помощью:
service:jmx:jmxmp://localhost:3333
Теперь визуальный vm, кажется, пытается подключиться бесконечно. Он показывает "Добавить службу: jmx: jmxp://localhost: 3333" в строке состояния... и продолжает делать это до тех пор, пока я не закрою приложение на удаленном конце, и в это время он выкинет всплывающее сообщение о том, что он не может подключиться с сервером.
При использовании SOCKS:
Мои попытки использования JMX и jstatd не удались.
Я не уверен, что прокси-сервер SOCKS работает, поэтому вот как я пытался подключиться:
ssh -i ~/.ssh/starter.pem -v -D 9696 [email protected]
Просто для полноты, я начал команду на другом конце с помощью
java -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.port=3333 <app>
И на локальном конце я установил соединение visualvm в соответствии с этой LINK на страницу справки VisualVm.
При подключении JMX я задаю имя машины и порт, щелкнув правой кнопкой мыши узел на visualvm и заполнив в главном порту, когда он подскажет мне. На этом этапе строка состояния внизу показывает, что visualvm пытается подключиться к удаленному компьютеру, и через пару минут он терпит неудачу.
При подключении jstatd я ожидал, что удаленные процессы появятся автоматически. Этого не произошло... не было сообщений об ошибках или что-то еще.
На стороне носков циклически повторяются следующие сообщения:
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
channel 3: open failed: connect failed: Connection timed out
debug1: channel 3: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 3333, connect from 127.0.0.1 port 43909, nchannels 4
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
channel 2: open failed: connect failed: Connection timed out
debug1: channel 2: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 1099, connect from 127.0.0.1 port 44644, nchannels 4
Интересно, связано ли это с каналом носков. Раньше у меня были туннелированные одиночные порты на удаленном компьютере, поэтому я не могу себе представить, что это проблема конфигурации для туннелирования. Я запускаю ubuntu linux с обеих сторон.
Спасибо за чтение:)