首页 > 编程语言 > 详细

JVM最多能创建多少个线程: unable to create new native thread

时间:2014-06-03 03:29:18      阅读:377      评论:0      收藏:0      [点我收藏+]

最近需要测试一个长连接服务器,数据上需要达到100W的长连接,测试的客户端,一个线程保持一个连接,发现linux服务器默认创建到3200多个线程的时候,就会报错这个错误“java.lang.OutOfMemoryError: unable to create new native thread。而且,此时整个系统都不能创新新的线程了,不能连接终端,不能执行任何命令。

貌似是内存不足,但实际内存尚有富余,经验证,是linux的一些内核参数限制了创建新的线程。

bubuko.com,布布扣



因为要保持长连接,所有先修改客户端保证更大的分配端口范围
修改 /etc/sysctl.conf
添加这样一行:
net.ipv4.ip_local_port_range = 1024 61000


修改系统参数

echo "100000" > /proc/sys/kernel/threads-max
echo "100000" > /proc/sys/kernel/pid_max     (默认32768)
echo "200000" > /proc/sys/vm/max_map_count   (默认65530)


修改/etc/security/limits.conf
*       -      nproc      999999
*       -      nofile      999999
PS:nproc是修改系统的max user processes大小;nofile  是修改open files的大小,另外linux 2.6.25内核之前有个宏定义,定义了这个值的最大值,为1024*1024,正好是100万,而在2.6.25内核及其之后,这个值是可以通过/proc/sys/fs/nr_open来设置,不过,999999足够用了。

很多人可能会遇到,只能启动32000多个线程就不能再起更多的线程了,其实就是pid_max = 32768 给限制住了



JVM最多能创建多少个线程: unable to create new native thread,布布扣,bubuko.com

JVM最多能创建多少个线程: unable to create new native thread

原文:http://blog.csdn.net/miclung/article/details/27547477

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!