linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况。

我在做集群集群聊天服务器项目的时候,多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,

通过这个命令 ulimit -n 可以看到默认值为1024

最近通过上网搜索,linux系统默认ulimit为1024个访问 用户最多可开启的程序数目。一般一个端口的最高连接为2的16次方65535。

查看全局文件句柄数限制(系统支持的最大值)
cat /proc/sys/fs/file-max

方法1

这个方法仅仅在当前打开的终端有效

方法2

第一步,修改/etc/security/limits.conf文件,在文件中添加如下行(*指代系统用户名),修改Linux系统对用户的关于打开文件数的软限制和硬限制:

soft nofile 65536hard nofile 65536

第二步,修改/etc/pam.d/login文件,在文件中添加如下行:

session required /lib/security/pam_limits.so

如果是64bit系统的话,应该为 :
session required /lib64/security/pam_limits.so

第三步,修改/etc/sysctl.conf文件,在文件中(清除文件原始内容(或者在原有的基础上添加,我是这么干的))添加如下行(修改网络内核对TCP连接的有关限制),其中fs.file-max=1000000 为全局限制,就是整台机器最大句柄数。

net.ipv4.ip_local_port_range = 1024 65535net.core.rmem_max=16777216net.core.wmem_max=16777216net.ipv4.tcp_rmem=4096 87380 16777216net.ipv4.tcp_wmem=4096 65536 16777216net.ipv4.tcp_fin_timeout = 10net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_timestamps = 0net.ipv4.tcp_window_scaling = 0net.ipv4.tcp_sack = 0net.core.netdev_max_backlog = 30000net.ipv4.tcp_no_metrics_save=1net.core.somaxconn = 262144net.ipv4.tcp_syncookies = 0net.ipv4.tcp_max_orphans = 262144net.ipv4.tcp_max_syn_backlog = 262144net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2fs.file-max=1000000

第四步,执行如下命令(使上述设置生效):

/sbin/sysctl -p /etc/sysctl.conf/sbin/sysctl -w net.ipv4.route.flush=1

第五步,执行如下命令(linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的):

echo ulimit -HSn 65536 >> /etc/rc.localecho ulimit -HSn 65536 >>/root/.bash_profileulimit -HSn 65536

第六步,重启机器。

通过这个命令 ulimit -n 可以看到值改为65536了,也就是说现在最多支持65536个tcp socket连接了
通过修改,tcp可以达到20000个连接完全没有问题

查看当前有多少个TCP连接到当前服务器命令:

netstat -antp |grep -i est |wc -l

870-Linux下解决高并发socket最大连接数限制相关推荐

  1. Linux下解决高并发socket最大连接数限制,tcp默认1024个连接

    linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立 ...

  2. 实战解读丨Linux下实现高并发socket最大连接数的配置方法

    摘要:Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制. [诉求场景] Linux操作系统,无论是编写 ...

  3. ubuntu优化服务器网络连接数,ubuntu下解决高并发socket最大连接数限制,tcp默认1024个连接...

    linux系统默认ulimit为1024个访问 用户最多可开启的程序数目.一般一个端口(即一个进程)的最高连接为2的16次方65536 通过这个命令 ulimit -n 可以看到默认值为1024 查看 ...

  4. Linux下高并发socket最大连接数所受的各种限制

    修改最大打开文件数 # ulimit -n 修改最大进程数 # ulimit -u ------------------------------------------------------ Lin ...

  5. linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题

    Linux下高并发socket最大连接数所受的限制问题1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对 ...

  6. Linux进程最大socket数,Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  7. 转:Linux下高并发socket最大连接数所受的各种限制

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  8. 教你修改Linux下高并发socket最大连接数所受的各种限制

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开 文件数量的限制(这是因为系统为 ...

  9. java 高并发商城库存订单处理,下单减库存,如何解决高并发减库存问题

    下单减库存,如何解决高并发减库存问题 1. 减库存 一般下单减库存的流程大概是这样的: 1.查询商品库存.这里直接查的Redis中的库存. 2.Redis中的库存减1.这里用到的Redis命令是:in ...

最新文章

  1. 使用objdump objcopy查看与修改符号表
  2. 捋一下测序后生信分析内容及其常用软件
  3. java token认证机制,OAuth认证协议原理分析及使用方法
  4. 设计模式方法VB.NET机房个人重构版-磨刀篇(一)
  5. gsm,gprs,cmwap,cmnet,3g,TD-SCDMA,CDMA2000,WCDMA
  6. 2017软件工程实践总结
  7. 第二届数据科学家大会 专家豪华阵容公布!
  8. JS 实现3D立体效果的首页轮播图(瞬间让你的网站高大上,逼格满满)
  9. 以后台服务的形式启动nodejs应用
  10. c语言不定长参数函数,DEFUN 如何定义支持不定长参数的函数
  11. 关于php的一些小知识!
  12. 解决在编程方式下无法访问Spark Master问题
  13. mysql 2037年,正确的方法来存储2037年之后的MySQL日期
  14. Vue 使用vue-json-excel 实现导出Excel
  15. 一位 19 年 Mac 用户的心声:“我真的很讨厌库克”
  16. 测试Unity中常用代码的运行所需时间:循环和函数篇 #性能测试 # for,foreach,while循环 #委托事件
  17. 程序员放松的8个好网站推荐
  18. 【mcuclub】LCD1602显示屏
  19. Windows认证 | 网络认证
  20. 【量化交易】量化分析概览

热门文章

  1. 移动端的vm vh是什么
  2. C++设计一个长方形类
  3. 强化学习(一):概述
  4. python加权随机_Python中的加权随机
  5. Win7-VirsualBox下学习Ubuntu--Ubuntu和Win7共享文件夹
  6. matlab显示hsi,matlab实现RGB与HSI的相互转换
  7. 微软发布的 免费文件恢复工具
  8. 帝国cms站群全自动采集入库程序源码分享
  9. 这台计算机没有连接到网络怎么办,通过路由器连接电脑连不上网怎么办_台式连接路由器没有网解决方法-系统城...
  10. 医院在线预约挂号系统 jsp+mysql+maven