提交spark作业,报错:spark "dispatcher-event-loop-3" java.lang.OutOfMemoryError: unable to create new native thread
起初以为是JVM内存资源分配不足的问题,经过排查之后没有解决问题。最后尝试修改linux最大线程数目解决问题。
查看当前用户的最大线程数:
ulimit -a输出如下信息:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 94256
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我们可以使用ulimit -对应参数 设置进行修改
例如: ulimit -n 2048 设置最大打开文件数为2048
修改最大数目,切换到root用户下:
vim /etc/security/limits.d/90-nproc.conf
* soft nproc 1024(默认是1024个),修改更大即可!
root soft nproc unlimited
修改如下:
* soft nproc 65535
root soft nproc unlimited
保存退出,重启生效,再次提交作业解决问题。
补充:有时候还会提示打开文件过度问题:
修改open files (-n) 1024更大即可!
ulimit -n 设置的最大打开文件数