Windows环境下JvisulaVM一般存在于安装了JDK的目录${JAVA_HOME}/bin/JvisualVM.exe,它支持(本地和远程)jstatd和JMX两种方式连接远程JVM。
jstatd (Java Virtual Machine jstat Daemon)——监听远程服务器的CPU,内存,线程等信息 JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。 备注:针对jstatd我尝试未成功,因此也不在这里误导别人。
正常配置:
在Spark中监控executor时,需要先配置jmx然后再启动spark应用程序,配置方式有三种:
1)在spark-defaults.conf中配置那三个参数
2)在spark-env.sh中配置:配置master,worker的JavaOptions
3)在spark-submit提交时配置
这里采用以下spark-submit提交时配置:
注意: 1)不能指定具体的 ip 和 port------因为spark中运行时,很可能一个节点上分配多个container进程,此时占用同一个端口,会导致spark应用程序通过spark-submit提交失败。 2)因为不指定具体的ip和port,所以在任务提交阶段会自动分配端口。 3)上边三种配置方式可能会导致监控级别不同(比如spark-submit只针对一个应用程序,spark-env.sh可能是全局一个节点所有executor监控【未验证】,请读者注意。)
通过yarn applicationattempt -list appicationId查找到applicationattemptid
通过yarn container -list aaplicationattemptId查找container id list
到具体executor所在节点服务器上,使用如下命令找到运行的线程,和 pid
然后通过 pid 找到对应JMX的端口
结果中看,疑似为48169或37692,稍微尝试一下即可连上对应的 spark executor
在本地windows服务器上找到JDK的目录,找到文件${JAVA_HOME}/bin/JvisualVM.exe,并运行它。启动后选择“远程”右键,添加JMX监控

填写监控executor所在节点ip
然后就可以启动监控:
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。