假设我用普通用户部署10个服务,线程数都用dubbo缺省值(100),部署到同一台机器上,那么这10个服务所占用的线程也就是10*100 = 1000。会导致部署时,抛java.lang.OutOfMemoryError:unable to create new native thread异常。
解决方案如下
#vi /etc/security/limits.d/90-nproc.conf
可以看出*号,也就是普通用户,他的线程数限制是1024,而root用户他是不限制的。这时候可以对1024的值进行增加,那么这个值我们能设置成多少?可以根据这台机的内存去计算出来。
计算方式:
default_nproc = total_memory/128K;
$ cat /proc/meminfo |grep MemTotal
假设上面的cat /proc/meminfo |grep MemTotal结果为3907380
$ echo "3907380 / 128"| bc
$ ulimit -u
ulimit -a # 显示目前资源限制的设定
ulimit -u # 用户最多可开启的程序数目
重启, 使之生效: # reboot