提交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 设置的最大打开文件数
