一、本文的目的
 
    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、监控到的截图如下: