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

貌似是内存不足,但实际内存尚有富余,经验证,是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)

修改/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 给限制住了

最新文章

  1. VMware三种上网模型
  2. 创业方向:O2O及移动社交 from 沈博阳
  3. samba完美安装
  4. Choose Concurrency-Friendly Data Structures
  5. selenium操作滚动条方法
  6. eclipse 中文乱码
  7. LINQ标准查询操作符详解(转)
  8. 转Java 回调函数的理解
  9. java--关键字和保留字
  10. div 被Object盖住的。解决办法
  11. Linux数据管理——文件锁定
  12. [每日一题] 11gOCP 1z0-052 :2013-08-31 数据库的存储结构....................................................A8
  13. HDU 6040---Hints of sd0061(STL)
  14. Linux Debugging(一): 使用反汇编理解C++程序函数调用栈
  15. 一行代码实现数组去重(ES6)
  16. IDEA中 GIT与SVN版本控制插件的切换
  17. Spring框架基础(下)
  18. Git常用命令集锦
  19. Python-Urllib库详解
  20. 深度学习课程笔记(四)Gradient Descent 梯度下降算法

热门文章

  1. Zend studio 10.6 配置XDEBUG
  2. 到底AR初创公司Magic Leap是不是骗子?我看未必
  3. Web App开发入门
  4. ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩
  5. box-sizing的相关属性
  6. TC SRM 591 DIV2 1000
  7. 【8.0、9.0c】树形列表 列标题 不对齐的问题及解决方案
  8. mysql主从复制过滤
  9. mysql主从切换摘要
  10. Emule Xtreme Kid eD2K 设置