Spark Executors的堆外内存使用量不断增加

时间:2015-11-12 09:22:31

标签: apache-spark spark-streaming

3个Spark执行器进程的堆外内存使用量不断增加,直到达到物理RAM的边界。这发生在两周前,此时系统停止运转,因为它无法产生新的流程。在这样的时刻重新启动Spark是一个明显的解决方案。在下面的收集内存使用情况图中,我们看到两个时刻我们重新启动Spark:上周我们将Spark从1.4.1升级到1.5.1,两周前将物理内存耗尽。

collectd memory usage of Spark box

如下所示,Spark执行程序进程使用约。 62GB的内存,而堆大小max设置为20GB。这意味着堆外内存使用量约为。 42GB。

$ ps aux | grep 40724
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
apache-+ 40724  140 47.1 75678780 62181644 ?   Sl   Nov06 11782:27 /usr/lib/jvm/java-7-oracle/jre/bin/java -cp /opt/spark-1.5.1-bin-hadoop2.4/conf/:/opt/spark-1.5.1-bin-hadoop2.4/lib/spark-assembly-1.5.1-hadoop2.4.0.jar:/opt/spark-1.5.1-bin-hadoop2.4/lib/datanucleus-rdbms-3.2.9.jar:/opt/spark-1.5.1-bin-hadoop2.4/lib/datanucleus-api-jdo-3.2.6.jar:/opt/spark-1.5.1-bin-hadoop2.4/lib/datanucleus-core-3.2.10.jar -Xms20480M -Xmx20480M -Dspark.driver.port=7201 -Dspark.blockManager.port=7206 -Dspark.executor.port=7202 -Dspark.broadcast.port=7204 -Dspark.fileserver.port=7203 -Dspark.replClassServer.port=7205 -XX:MaxPermSize=256m org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url akka.tcp://sparkDriver@xxx.xxx.xxx.xxx:7201/user/CoarseGrainedScheduler --executor-id 2 --hostname xxx.xxx.xxx.xxx --cores 10 --app-id app-20151106125547-0000 --worker-url akka.tcp://sparkWorker@xxx.xxx.xxx.xxx:7200/user/Worker
$ sudo -u apache-spark jps
40724 CoarseGrainedExecutorBackend
40517 Worker
30664 Jps
$ sudo -u apache-spark jstat -gc 40724
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
158720.0 157184.0 110339.8  0.0   6674944.0 1708036.1 13981184.0 2733206.2  59904.0 59551.9  41944 1737.864  39     13.464 1751.328
$ sudo -u apache-spark jps -v
40724 CoarseGrainedExecutorBackend -Xms20480M -Xmx20480M -Dspark.driver.port=7201 -Dspark.blockManager.port=7206 -Dspark.executor.port=7202 -Dspark.broadcast.port=7204 -Dspark.fileserver.port=7203 -Dspark.replClassServer.port=7205 -XX:MaxPermSize=256m
40517 Worker -Xms2048m -Xmx2048m -XX:MaxPermSize=256m
10693 Jps -Dapplication.home=/usr/lib/jvm/java-7-oracle -Xms8m

一些信息:

  • 我们使用Spark Streaming lib。
  • 我们的代码是用Java编写的。
  • 我们运行Oracle Java v1.7.0_76
  • 从Kafka读取数据(Kafka在不同的盒子上运行)。
  • 数据写入Cassandra(Cassandra在不同的盒子上运行)。
  • 1个Spark master和3个Spark执行器/ worker,在4个独立的盒子上运行。
  • 我们最近将Spark升级到1.4.1和1.5.1,所有这些版本的内存使用模式都相同。

这种不断增加的堆外内存使用的原因是什么?

0 个答案:

没有答案