1.什么是小资源大数据的OOM情况?
假设用户driver端的内存为1G,cpu核数指定为1核,在运行程序时加载到内存中的数据量超过了1G,就会导致JVM崩溃抛出 Java heap space 堆内存空间溢出异常或者overhead limit exceededGC回收时间过长的内存异常,一般为这两种,也可能有堆外存溢出,但可能较小。
2.使用内存分析工具进行分析
先将dump文件取出,然后使用eclipse memory analyzer, 基于eclipse RCP的内存分析工具。详细信息参见:http://www.eclipse.org/mat/
3.在程序内哪些情况会导致内存溢出?
1)存在占用内存较大的数据结构如array、list等,当他们的长度过大,比如5000w长度时,如果是int型的数组那么将会占用约200mb的内存,如果是double类型将占用400mb,这可是一个相当庞大的开销。
2)action操作,例如包括但不限于collect(),redcue(),join()等操作,collect()会将rdd或dataset等数据集转化为数组,占用内存大小取决于转化后的数组大小,reduce(),groupbykey()等操作会触发shuffle操作的方法,会将多个分区的数据集中到一个分区中也有可能发生内存溢出,join()操作时系统会将两个rdd的数据都加载都内存进行匹配和比较也会导致内存溢出。
3)缓存的数据例如使用catcah()等操作将数据缓存到了内存中时,如果缓存的数据过大也是对系统不利的,容易导致内存溢出,可以修改缓存级别,选择磁盘&#x