performance - 为什么 Spark 应用程序在 MaxGCPauseMillis 较低的情况下运行速度会慢很多?

标签 performance apache-spark garbage-collection g1gc

我正在使用不同的 G1 配置测试 Spark-1.5.1,并观察到我的应用程序在 MaxGCPauseMillis = 200(默认)时需要 2 分钟才能完成,在 MaxGCPauseMillis = 1 时需要 4 分钟。堆使用情况如下所示。从下面的统计中我们可以看到,两种配置的 GC 时间仅相差 5 秒。

我想知道为什么执行时间增加这么多?

一些统计数据:

MaxGCPauseMillis = 200 - 年轻 GC 数量:67;执行器的GC时间:9.8秒

MaxGCPauseMillis = 200 MaxGCPauseMillis = 1 - 年轻 GC 数量:224;执行器的GC时间:14.7秒

MaxGCPauseMillis = 1 红色区域是年轻代区域,黑色是老年代区域。该应用程序在 10 个节点上运行,每个节点有 1 个执行程序和 6 GB 堆。

该应用程序是一个字数统计示例:

val lines = sc.textFile(args(0), 1)

val words = lines.flatMap(l => SPACE.split(l))
val ones = words.map(w => (w,1))
val counts = ones.reduceByKey(_ + _)

//val output = counts.collect()
//output.foreach(t => println(t._1 + ": " + t._2))
counts.saveAsTextFile(args(1))

最佳答案

MaxGCPauseMillis 是对 JVM 的提示,GC 引起的总体暂停时间不应超过指定值(以毫秒为单位)。对于大多数生产级系统,建议值为 200 毫秒。

任何较低的值都可能会迫使 GC 运行比所需次数更多的次数,并会影响应用程序的整体吞吐量,这正是您的情况所发生的情况。

当我们配置 MaxGCPauseMillis=200 时,年轻 GC 的数量为 67,并且年轻 GC 的数量几乎是 4 倍(224)我们配置MaxGCPauseMillis=1

引用here以获得更详细的解释。

关于performance - 为什么 Spark 应用程序在 MaxGCPauseMillis 较低的情况下运行速度会慢很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286350/

相关文章:

amazon-web-services - 无法从本地 pyspark 对 ec2 spark 集群执行简单任务

scala - 无法解析具有此类签名的引用 StructField

javascript - 防止此 javascript 代码中的内存泄漏?

caching - 当 Varnish 缓存已满时会发生什么?

mysql - 减少 Ruby on Rails 到数据库的流量

asp.net - 解决 .net Web 应用程序中的可伸缩性和性能问题

php - 在 HTML 页面的 <?php/* */?> 中封装评论的好处和注意事项?

performance - 衡量应用程序性能的技术

apache-spark - 在错误/中断时通过unix shell终止在 yarn 簇模式下运行的 Spark 流作业

c# - 使用 mono 的 marksweep-par 垃圾收集