我们在连接到在Amazon的EC2集群中运行的Java应用程序时遇到问题.我们肯定允许"JMX端口"(通常是RMI注册表端口)和服务器端口(完成大部分工作)到相关实例的安全组.Jconsole连接但似乎挂起并且从不显示任何信息.
我们正在运行我们的java,如下所示:
java -server -jar foo.jar other parameters here > java.log 2>&1
Run Code Online (Sandbox Code Playgroud)
我们尝试过:
jconsole在ssh上使用remote-X11在实例上运行,它可以连接并显示信息.因此JRE 是本地出口的.tcpdump以确保交通不会到其他端口.java -version 输出:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我们使用的是我的简单的JMX包,它允许我们设置两个 RMI注册表和服务器端口,一般是通过RMI注册表半随机选择的.您还可以使用以下JMX URI强制执行此操作:
service:jmx:rmi://localhost:" + serverPort + "/jndi/rmi://:" + registryPort + "/jmxrmi"
Run Code Online (Sandbox Code Playgroud)
这些天我们为服务器和注册表使用相同的端口.在过去,我们使用X注册表端口和X+1服务器端口来简化安全组规则.您连接到注册表端口jconsole或您正在使用的任何JMX客户端.
我一直在尝试获取Spark Streaming作业,在EC2实例上运行以使用JMX向VisualVM报告.
截至目前,我有以下配置文件:
火花/ conf目录/ metrics.properties:
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource
driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
Run Code Online (Sandbox Code Playgroud)
我开始像这样的火花流工作:(之后添加的-D位希望远程访问ec2的jmx)
终端:
spark/bin/spark-submit --class my.class.StarterApp --master local --deploy-mode client \
project-1.0-SNAPSHOT.jar \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=54321 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)