我有一個在遠程服務器上運行的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