一、本文的目的
Straggler是目前研究的热点,Spark中也存在Straggler的问题。GC问题是总所周知的导致Straggler的重要因素之一,为了了解GC导致的Straggler问题,首先需要学习GC问题以及如何监控Spark的GC。GC问题的讨论比较多了,推荐一篇系列文章用于学习:成为Java的GC专家。
二、本文所需工具
本文所需工具很简单,基本不用下载。监控GC的前提是:
1、已经在集群上安装了Spark并可以正常提交作业;
2、本地装有jdk1.6以上版本。
本文实际使用的工具是:java自带的jvisualvm。
三、配置jvisualvm
1、远程集群:需要简单配置并启动jstatd。方法比较简单,共两步:
i. 在JAVA_HOME的bin目录下新建一个jstatd.all.policy的文件,文件内容为:
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
ii. 执行:jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=yourip。
将命令中的yourip替换成Spark的master所在的node的地址,该地址也是jvisualvm需要连接的地址。确保不会报RMI和Connect的错误。
2、本地主机:无需配置,启动jvisualvm即可。
在jvisualvm中新建远程主机,IP地址为之前填写的地址,使用jstatd连接,默认端口1099。然后就可以看到远程运行的jvm虚拟机了。
四、监控
1、在jvisualvm的“工具”选项中的插件一栏下载Visual GC插件,然后就可以看到虚拟机的监控页面多出一栏GC监控。
2、在集群上通过Spark submit提交一个应用,本地就可以监控到了,双击查看其信息。
3、监控到的截图如下: