JVM最多能创建多少个线程:unabletocreatenewnativethread
2016-07-08 14:12
375 查看
最近需要测试一个长连接服务器,数据上需要达到100W的长连接,测试的客户端,一个线程保持一个连接,发现linux服务器默认创建到3200多个线程的时候,就会报错这个错误“java.lang.OutOfMemoryError: unable to create new native thread。而且,此时整个系统都不能创新新的线程了,不能连接终端,不能执行任何命令。
貌似是内存不足,但实际内存尚有富余,经验证,是linux的一些内核参数限制了创建新的线程。
因为要保持长连接,所有先修改客户端保证更大的分配端口范围 修改 /etc/sysctl.conf 添加这样一行: net.ipv4.ip_local_port_range = 1024 61000
修改系统参数
修改/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 给限制住了
貌似是内存不足,但实际内存尚有富余,经验证,是linux的一些内核参数限制了创建新的线程。
因为要保持长连接,所有先修改客户端保证更大的分配端口范围 修改 /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) |
* - 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 给限制住了
相关文章推荐
- redis储存中文,客服端读取出现乱码
- oracle 11g 修改private ip, public ip, vip, scan ip
- Netty的入门-拆包和粘包的处理
- 插头dp入门 hdu 4804 + 5286
- as通过gradle实现多渠道打包+使用配置文件进行版本管理+指定apk输出路径和apk文件名
- gpu-z怎么用,显卡怎么看体质
- hdu 4821 滑动窗口+字符串哈希
- gson2.7官网下载
- Spring quartz设置定时任务
- App引导页的实现带圆点指示器
- DataContractJsonSerializer .Net Framework3.5处理Json
- ios developer tiny share-20160708
- ios developer tiny share-20160708
- 【源码】StringBuilder和StringBuffer源码深度剖析
- Linux字符驱动中container_of宏的作用
- IOS 屏幕快照
- 如何显示选择input file的图片
- <LeetCode> 题1: A+B求和
- ArcGIS for Android 临时图层绘制文字 汉字不显示问题
- Python的is None 和 == None