2016-02-29 9 views
2

У меня есть искровое приложение, работающее на удаленном сервере, и мне нужно получить его кучу дампа для повышения производительности. Я смог запустить службу jstatd на удаленной машине и подключиться к ней с помощью visualvm. Однако jstatd не разрешает сброс кучи удаленных компьютеров (я использую visual vm 1.3.8).Не удается подключиться к удаленному jmx-серверу с помощью jvisualvm или jconsole (netcat working)

Чтобы решить эту проблему, я начал свое приложение со следующими дополнительными опциями:

--conf "spark.driver.extraJavaOptions=-Dcom.sun.management.jmxremote \ 
-Dcom.sun.management.jmxremote.port=54321 \ 
-Dcom.sun.management.jmxremote.rmi.port=54320 \ 
-Dcom.sun.management.jmxremote.authenticate=false \ 
-Dcom.sun.management.jmxremote.ssl=false \ 
-Djava.rmi.server.hostname=$HOSTNAME" 

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

sudo netstat -lp | grep 37407 
tcp  0  0 *:54321      *:*       LISTEN  37407/java 
tcp  0  0 *:54320      *:*       LISTEN  37407/java 

Чтобы проверить, доступен ли удаленный порт через локальный компьютер, я использовал утилиту netcat, и соединение с удаленным хостом на обоих 54321 и 54320 было успешным.

Однако, когда я пытаюсь подключиться к хосту с помощью visualvm или jconsole, он не может подключиться. Visual vm сообщает о следующей ошибке:

cannot connect to hostname:54321 using service:jmx:rmi:///jndi/rmi://hostname:54321/jmxrmi 

Что я здесь делаю неправильно?

ответ

0

для того, чтобы дать возможность Jconsole соединение: попробуйте добавить этот флаг

-Dcom.sun.management.jmxremote.local.only=false 

и для того, чтобы дамп кучи, вам не нужно подключать через JConsole, просто использовать jmap:

$>jmap -dump:format=b,live,file=<filename> <process-id> 

и, наконец, если у искры есть демона, контролирующего его, убедитесь, что он не убивает процесс во время создания дампа кучи.

+0

Моя проблема была другой. Мне нужно запустить это в приложении под управлением Spark. Команда spark-submit вместе с параметрами jmx должна выполняться на той же машине, что и мастер приложения. В противном случае служба запускается, но не ведет себя так, как предполагалось. – Sohaib

0

Проблема заключается в том, что $ HOSTNAME это имя хоста сервера вы работаете искру подать с, вам необходимо установить имя хоста машины водитель искры работает на:

-Djava.rmi.server.hostname=<hostname of spark driver> 

BTW, Это причина, по которой он работал только для вас, когда ваше искровое приложение и источник искры были на одном сервере.