使用JMC工具对spark 程序调优(一)

spark调优是一个头疼的事,这个疼在什么地方呢?
(1)spark将内部几乎完全封装,类似黑箱,不了解内部机理
(2)spark 调优参数众多,参数之间关联很多,无法清晰知道调优效果
(3)spark运行在集群上,本地调试功能有限

如果谁能精通这三项,那就很厉害了,是不是?实际情况中,我们需要找出调优项,执行,并能看到明确的效果。为了调优,除了绞尽脑汁,钻研黑箱,还可以通过一些工具,提高效率。这里的主角,便是JMC工具。接下来的主要内容,就是如何使用JMC工具对spark程序调优。


JMC重点功能介绍

接下来,先介绍我们要使用的功能点,这些功能点将在调优中发挥重要作用。

(1)MBean服务器功能介绍

  1. 概览
  2. 触发器
    以一个Tomcat程序为例,打开概览,添加我的图表:
    添加我的图表

这里选择“Free Java Heap Memory”属性,我的图表1:
这里写图片描述

在概览里面可以看一些环境实时信息。接下来看下触发器。
我们可以添加,勾选触发规则,比如勾选“CPU占用率”,然后点击“CPU占用率”,可以编辑该规则:
这里写图片描述

这里写图片描述

我们这里cpu预警触发条件设置了 1%,一旦达到1%,并持续1秒,就会触发operation,那么,有哪些operation呢:
这里写图片描述

我们这里选择了“启动限时飞行记录”,飞行记录下文会讲到。
另外,“约束条件”指时间范围条件。

除了勾选已有规则,我们还可以添加规则,比如:选择“Catalina”中ThreadPool中“http-nio-8888”中“maxThreads属性,配置触发规则:
这里写图片描述
就生成了自定义的触发规则:
这里写图片描述

当然,还有别的功能,我们的介绍先就到此。

(2)飞行记录器功能介绍
飞行记录器要介绍的比较多,先看看主要功能:
这里写图片描述

正如你看到的,各个都实用,这里有篇文章,对飞行记录器做了比较详细的介绍。
https://blog.takipi.com/oracle-java-mission-control-the-ultimate-guide/#jmcmemory

那么,我该说些什么呢?比如我们看下“代码”模块功能。

这里写图片描述

从图中看起来,是不是感觉很棒,像不像程序员大救星。至少笔者初次见到时觉得不错。

除了“代码”模块功能丰富,其它模块也同样如此。可以说,JMC是java自带调试工具中做的最好的之一。

JMC介绍就到此了,接下来讲怎么用JMC调试spark程序。

参考资料:
https://blog.takipi.com/oracle-java-mission-control-the-ultimate-guide/#jmcmemory