Spark - ERROR Executor: Exception in tjava.lang.OutOfMemoryError: unable to create new native thread

如果你的Spark程序在执行过程中报出如下类似的错误:

ERROR Executor: Exception in task xxx in stage xxx
java.lang.OutOfMemoryError: unable to create new native thread

那么可能性非常大的原因是你当前通过spark-submit或spark-sql启动的程序中开启了过多的进程,以至超过了操作系统对当前用户所允许打开的进程数的上限。确定这个问题的方法是这样的:

首先,通过命令:

ulimit -u

来查看一下系统允许的当前用户能开启的进程数,默认值是1024。

然后,我们通过如下这样一条命令来持续追踪当前用户开启的进程数

while true;do ps -u your-user-name  -L | wc -l;sleep 1;done

接下就可以启动的我们Spark程序然后观察进程数量的变化了,如果发现进程数量持续上涨,并且在超过了进程上限之后抛出了OOM异常,那么就可以直接判定是用户的所能开启的进程数量收受限了。

那么什么情况会导致spark在执行过程中开启大量的进程呢?一个可能的原因是由于数据的“无序”性,导致shuffle过程开销过大。

你可能感兴趣的:(thread,spark,oom,native,outofmemor)