apache-spark - 在 EMR 集群上优化 GC

标签 apache-spark garbage-collection jvm emr amazon-emr

我正在 EMR 上运行用 Scala 编写的 Spark 作业,并且每个执行程序的标准输出都充满了 GC 分配失败。

2016-12-07T23:42:20.614+0000: [GC (Allocation Failure) 2016-12-07T23:42:20.614+0000: [ParNew: 909549K->432K(1022400K), 0.0089234 secs] 2279433K->1370373K(3294336K), 0.0090530 secs] [Times: user=0.11 sys=0.00, real=0.00 secs] 
2016-12-07T23:42:21.572+0000: [GC (Allocation Failure) 2016-12-07T23:42:21.572+0000: [ParNew: 909296K->435K(1022400K), 0.0089298 secs] 2279237K->1370376K(3294336K), 0.0091147 secs] [Times: user=0.11 sys=0.01, real=0.00 secs] 
2016-12-07T23:42:22.525+0000: [GC (Allocation Failure) 2016-12-07T23:42:22.525+0000: [ParNew: 909299K->485K(1022400K), 0.0080858 secs] 2279240K->1370427K(3294336K), 0.0082357 secs] [Times: user=0.12 sys=0.00, real=0.01 secs] 
2016-12-07T23:42:23.474+0000: [GC (Allocation Failure) 2016-12-07T23:42:23.474+0000: [ParNew: 909349K->547K(1022400K), 0.0090641 secs] 2279291K->1370489K(3294336K), 0.0091965 secs] [Times: user=0.12 sys=0.00, real=0.00 secs] 

我正在读取几 TB 的数据(主要是字符串),所以我担心持续的 GC 会减慢处理时间。
我很感激有关如何理解此消息以及如何优化 GC 以使其消耗最少 CPU 时间的任何指示。

最佳答案

分配失败是启动 GC 周期的正常和最常见的原因。

日志告诉我们 GC 每秒发生一次,大约需要 10ms,即 1% 的时间。 IMO,这里没有什么可以优化的。

关于apache-spark - 在 EMR 集群上优化 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029502/

相关文章:

java - 使用 Apache Spark 运行运动模拟

apache-spark - 为什么我的count,Distinct和Distinct count在spark的巨大集群中非常慢

c# - 垃圾收集运行得太晚 - 导致 OutOfMemory 异常

java - 究竟是什么导致堆栈溢出错误?

apache-spark - 使用spark删除hbase单元

apache-spark - co-located vs. co-partitioned RDD

java - 识别未被垃圾收集的对象的更好方法?

c# - 超出范围后进程仍在运行 - 这安全吗?

java - WeakHashMap 和 ReentrantReadWriteLock

Tomcat 堆使用行为