我有一个在远程服务器上运行的spark应用程序,为了提高性能,我需要获取它的堆转储。我能够在远程计算机上运行jstatd服务并使用visualvm连接到它。但是,jstatd不启用远程机器的堆转储(我正在使用visual vm 1.3.8)。无法使用jvisualvm或jconsole连接到远程jmx服务器(netcat正在运行)
要解决这一点,我开始了我的有以下额外的选项应用:
--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
我在做什么错在这里?
我的问题是不同的。我需要在运行Spark的应用程序上运行此操作。 spark-submit命令以及jmx选项需要在与应用程序主机相同的机器上完成。否则,该服务将运行,但不会按预期运行。 – Sohaib