一.问题切入

调用spark 程序的时候,在获取数据库连接的时候总是报  内存溢出 错误

(在ideal上运行的时候设置jvm参数 -Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=1024M,不会报错)

二.jvm参数 和 saprk 参数 和内存四区 解读

1.内存四区

1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回  收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、数据区:主要包括静态全局区和常量区,如果要站在汇编角度细分的话还可以分为很多小的区。

全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的  另一块区域。 程序结束后有系统释放

常量区:常量字符串就是放在这里的。 程序结束后由系统释放

4、代码区:存放函数体的二进制代码。

参考: http://blog.csdn.net/wu5215080/article/details/38899259

2.jvm 参数

-Xms512m -Xmx1024m-XX:PermSize=512m -XX:MaxPermSize=1024M

-Xms                            JVM初始分配的堆内存                                               默认是设备物理内存的 1/64

-Xmx                            JVM最大允许分配的堆内存,按需分配                        默认是设备物理内存的 1/4

-XX:PermSize               JVM初始分配的非堆内存                                            默认是设备物理内存的 1/64

-XX:MaxPermSize        JVM最大允许分配的非堆内存                                      默认是设备物理内存的 1/4

参考: http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html

3.spark参数

-- driver-memory : driver运行的内存大小,默认1G  driver:sparkcontext ,sqlContext等运行的地方, sparkcontext ,sqlContext 一般运行在栈内存

-- executor-memory : executor的内存大小,默认1G   executor: rdd 等运行的地方 ,rdd 一般运行在栈内存

conf spark.storage.memoryFraction=0.3     spark用于缓存rdd的内存百分比(剩下的内存用来保证任务运行时各种其它内存空间的需要),默认0.6(和运行在堆或栈没有关系)

得出:

栈内存   正比于 driver-memory : 内存被 sparkcontext,sqlContext 等固定占用,和数据库连接没有多大关系

栈内存  正比于  executor-memory ;  executor-memory 分两种: rdd 和其他(包含获取获取 数据库连接的内存)

三.问题分析和解决

方向:增大executor-memory 和减小 conf spark.storage.memoryFraction 的值 ,根据具体环境而定

命令方式:

nohup spark-submit \

--masteryarn  \

--executor-memory 1024M \

--confspark.storage.memoryFraction=0.3 \

--classcom.xiaopeng.bi.gamepublish.GamePublishKpi \

/home/hduser/projs/xiaopeng_bi.jar60 >> /home/hduser/projs/logs/gamepublishkpi.log &

代码方式:

val sparkConf = newSparkConf().setAppName(this.getClass.getName.replace("$",""))

.set("spark.default.parallelism", "60") //  1. 调节并行度

.set("spark.serializer","org.apache.spark.serializer.KryoSerializer") // 3.序列化方式

.set("spark.shuffle.consolidateFiles", "true")// 4. shuffle 过程中  合并小文件

.set("spark.storage.memoryFraction", "0.4");// 5.cache占用的内存占比

.set("spark.sql.shuffle.partitions", "60")// 6.shuffle 时 partion的个数
---------------------
作者:kequanjade
原文:https://blog.csdn.net/keyuquan/article/details/72629605

spark性能调优--jvm调优(转)的更多相关文章

  1. Spark性能优化:开发调优篇

    1.前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算 ...

  2. spark调优——JVM调优

    对于JVM调优,首先应该明确,(major)full gc/minor gc,都会导致JVM的工作线程停止工作,即stop the world. JVM调优一:降低cache操作的内存占比 1.   ...

  3. (转)Spark性能优化:资源调优篇

      在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何 ...

  4. 【转载】 Spark性能优化:资源调优篇

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

  5. Spark性能优化:资源调优篇(转)

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

  6. Spark性能优化--数据倾斜调优与shuffle调优

    一.数据倾斜发生的原理 原理:在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作.此时如果某个key对应的数据量特 ...

  7. Spark性能优化:shuffle调优

    调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO.序列化.网络数据传输等操作.因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行 ...

  8. Spark性能优化:资源调优篇

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

  9. java性能调优---------------------JVM调优方案

    JVM的调优的主要过程有: 1.确定堆内存大小(-Xmx.-Xms) 2.合理分配新生代和老年代(-XX:NewRatio.-Xmn.-XX:SurvivorRatio) 3.确定永久区大小(-XX: ...

随机推荐

  1. POJ1077 Eight —— A*算法

    主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 关于A*算法:g(n)表示从起点到任意节点n的路径花费,h(n)表示从节点n到目标节点路径花费 ...

  2. HDU2102 A计划 —— BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  3. html5--6-68 实战前的准备工作:了解HTML5大纲算法

    html5--6-68 实战前的准备工作:了解HTML5大纲算法 学习要点 了解HTML5大纲算法 在html5中有一个很重要的概念,叫做HTML5大纲算法(HTML5 Outliner),它的用途为 ...

  4. JAVASCRIPT技术 表达式验证

    失去焦点时,调用方法: <html> <head><script type="text/javascript">function upperCa ...

  5. WAS:Thread "server.startup : 1" (00000020) and may be hung异常

    有现场server启动时,启动不了,后台报错如下: [// ::: CST] ThreadMonitor W WSVR0605W: Thread ) has been active milliseco ...

  6. oracle 转移表空间

    一.系统表空间数据文件迁移:SQL> conn /@tmpdb as sysdba 已连接. SQL> desc dba_data_files; 名称 是否为空? 类型 --------- ...

  7. hdu-2680 Choose the best route(最短路)

    题目链接: Choose the best route Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K ( ...

  8. EOJ Monthly 2018.4 (E.小迷妹在哪儿(贪心&排序&背包)

    ultmaster 男神和小迷妹们玩起了捉迷藏的游戏. 小迷妹们都希望自己被 ultmaster 男神发现,因此她们都把自己位置告诉了 ultmaster 男神,因此 ultmaster 男神知道了自 ...

  9. [Selenium] 搭建 Android WebDriver 环境

    1.安装 Android SDK 到如下网址下载 Android SDK http://developer.android.com/sdk/index.html 2.创建 Android 虚拟设备 解 ...

  10. bzoj1037生日聚会——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1037 记录每个状态时前面所有连续子序列中男生与女生差距的最大值,根据那个转移即可. 代码如下 ...