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

这篇具有很好参考价值的文章主要介绍了Linux下解决高并发socket最大连接数限制,tcp默认1024个连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 linux获取TCP连接数

方法一:
[admin@zabbix ~]$ ss -ant | awk 'NR>1 {a[$1]++} END {for (b in a) print b,a[b]}'
ESTAB 535
TIME-WAIT 80
LISTEN 13

方法二:
[admin@zabbix ~]$ netstat -an | awk '/^tcp/ {a[$NF]++} END {for (b in a) print b,a[b]}'
TIME_WAIT 91
SYN_SENT 7
ESTABLISHED 535
LISTEN 13

方法三:
[admin@zabbix ~]$ cat /proc/net/snmp
Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates
Ip: 1 64 12503948767 0 0 0 0 0 12503948767 12822437575 0 0 0 0 0 0 0 0 0
Icmp: InMsgs InErrors InDestUnreachs InTimeExcds InParmProbs InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps
Icmp: 985733 389 3779 69 0 0 0 490950 490935 0 0 0 0 984433 0 2548 0 0 0 0 490935 490950 0 0 0 0
IcmpMsg: InType0 InType3 InType8 InType11 OutType0 OutType3 OutType8
IcmpMsg: 490935 3779 490950 69 490950 2548 490935
Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts
Tcp: 1 200 120000 -1 1585243925 55029885 290059 15370 535 12500488405 12818246605 731883 25103 3821760
Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
Udp: 2546210 3436 0 2657997 0 0
UdpLite: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
UdpLite: 0 0 0 0 0 0

注:通过CurrEstab获取tcp连接数
[admin@zabbix ~]$ cat /proc/net/snmp | grep Tcp | tail -1 | awk '{print $10}'
535

扩展:如何获取每秒新增的TCP连接呢?
通过cat /proc/net/snmp得到最近240秒内PassiveOpens的增量,除以240可以得到每秒的tcp连接增量。

详情参考我的另一篇文章:https://blog.csdn.net/m0_37814112/article/details/80774935

如果想知道cat /proc/net/snmp输出选项各个参数的意义,可以参考
http://perthcharles.github.io/2015/11/10/wiki-netstat-proc/
Linux下 查看tcp连接数及状态
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    LISTEN: 侦听来自远方的TCP端口的连接请求
    SYN-SENT: 再发送连接请求后等待匹配的连接请求
    SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
    ESTABLISHED: 代表一个打开的连接
    FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
    FIN-WAIT-2: 从远程TCP等待连接中断请求
    CLOSE-WAIT: 等待从本地用户发来的连接中断请求
    CLOSING: 等待远程TCP对连接中断的确认
    LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
    TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
    CLOSED: 没有任何连接状态
 

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

  本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,最总上网搜索,linux系统默认ulimit为1024个访问 用户最多可开启的程序数目。一般一个端口的最高连接为2的16次方65535

  • 第一步,修改/etc/security/limits.conf文件,在文件中添加如下行(*指代系统用户名),修改Linux系统对用户的关于打开文件数的软限制和硬限制:
    soft nofile 65535
    
    hard nofile 65535
  • 第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
  •     session required /lib/security/pam_limits.so

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

  • 第三步,修改/etc/sysctl.conf文件,在文件中(清楚文件原始内容)添加如下行(修改网络内核对TCP连接的有关限制):
  • net.ipv4.ip_local_port_range = 1024 65535
    
    net.core.rmem_max=16777216
    
    net.core.wmem_max=16777216
    
    net.ipv4.tcp_rmem=4096 87380 16777216
    
    net.ipv4.tcp_wmem=4096 65536 16777216
    
    net.ipv4.tcp_fin_timeout = 10
    
    net.ipv4.tcp_tw_recycle = 1
    
    net.ipv4.tcp_timestamps = 0
    
    net.ipv4.tcp_window_scaling = 0
    
    net.ipv4.tcp_sack = 0
    
    net.core.netdev_max_backlog = 30000
    
    net.ipv4.tcp_no_metrics_save=1
    
    net.core.somaxconn = 262144
    
    net.ipv4.tcp_syncookies = 0
    
    net.ipv4.tcp_max_orphans = 262144
    
    net.ipv4.tcp_max_syn_backlog = 262144
    
    net.ipv4.tcp_synack_retries = 2
    
    net.ipv4.tcp_syn_retries = 2
  • 第四步,执行如下命令(使上述设置生效):
  • /sbin/sysctl -p /etc/sysctl.conf
    
    /sbin/sysctl -w net.ipv4.route.flush=1
  • 第五步,执行如下命令(linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的):
echo ulimit -HSn 65536 >> /etc/rc.local

 echo ulimit -HSn 65536 >>/root/.bash_profile

 ulimit -HSn 65536
  • 第六步,重启机器。

通过修改,tcp可以达到20000个连接完全没有问题文章来源地址https://www.toymoban.com/news/detail-528503.html

到了这里,关于Linux下解决高并发socket最大连接数限制,tcp默认1024个连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP报文与三次握手四次断开、TCP最大连接数与文件打开数限制、keepalive、tcpdump、wireshark抓包分析工具

    tcp详解、tcp与udp对比等 TCP:传输控制协议 UDP:用户数据报协议 源端口和目的端口字段:各占 2 字节(16位)。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接

    2024年04月22日
    浏览(46)
  • Linux中 socket编程中多进程/多线程TCP并发服务器模型

    一次只能处理一个客户端的请求,等这个客户端退出后,才能处理下一个客户端。 缺点:循环服务器所处理的客户端不能有耗时操作。 模型 源码 可以同时处理多个客户端请求 父进程 / 主线程专门用于负责连接,创建子进程 / 分支线程用来与客户端交互。 模型 源码 模型 源

    2024年02月12日
    浏览(42)
  • java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

    首先需要知道java里如何创建一个Socket服务器端。 提示:注意server.accept()方法调用会阻塞,只有新的客户端连接后才返回一个新的socket对象。如果一直未连接那么会一直处于阻塞状态 了解了如何创建一个socket服务器端后。那么如何实现给指定的连接客户端发送消息呢?首先我

    2024年02月11日
    浏览(73)
  • Linux 的 TCP 连接数量最大不能超过 65535?

    在使用 TCP/IP 协议时,会遇到一个经典的问题:TCP 连接数量最大不能超过 65535。这是因为 TCP 协议头中的端口号是 16 位的,因此最大只能表示 65535 个端口号。那么,服务器又是如何应对百万千万的并发连接的呢? Linux TCP 连接数量最大不能超过 65535 在理解如何处理大量并发连

    2024年02月09日
    浏览(39)
  • TCP Socket Client 测试工具,并发测试

    TCP协议 Socket客户端测试程序 发送数据支持ASCII与16进制格式 可以模拟并发压力测试 创建终端,然后发送数据   工具下载  

    2024年02月12日
    浏览(42)
  • HTTP的并发连接限制和连接线程池

    大量的客户端连接到服务器,会导致服务器端需要大量的维护连接资源,同时需要处理客户端的请求,这是如何高效的执行任务成了一个关键的问题,所以, 并发连接限制和连接线程池 的出现就是为了解决 如何有效地管理连接并同时处理多个请求 。 并发连接限制,又称为

    2024年02月12日
    浏览(41)
  • Linux 解决root用户被限制连接服务器

    使用 root 用户不能链接服务器,密码对,就是连接不上,连接被拒绝 ① sudo passwd root 使用 sudo passwd root 对root用户修改密码 ② su root 修改完成之后,切换到root用户即可使用 ③ ④ 重启 systemctl restart sshd 这里需要注意的是:centos6里面用命令 service ssh restart ,在centos7需要用 sy

    2024年02月11日
    浏览(51)
  • TCP,TCP 连接建立,TCP 连接断开,Socket 编程

    目录 TCP基本认识 TCP 头格式有哪些? 为什么需要 TCP 协议? TCP 工作在哪一层? 什么是 TCP ? 什么是 TCP 连接? #如何唯一确定一个 TCP 连接呢? UDP 和 TCP 有什么区别呢?分别的应用场景是? #TCP 和 UDP 可以使用同一个端口吗? TCP 连接建立 #TCP 三次握手过程是怎样的? 为什么

    2023年04月27日
    浏览(50)
  • 图解系列 图解Spring Boot 最大连接数及最大并发数

    每个Spring Boot版本和内置容器不同,结果也不同,这里以 Spring Boot 2.7.10 版本 + 内置Tomcat 容器举例。 在 SpringBoot2.7.10 版本中内置Tomcat版本是 9.0.73 ,SpringBoot内置Tomcat的默认设置如下: Tomcat的连接等待队列长度,默认是 100 Tomcat的最大连接数,默认是 8192 Tomcat的最小工作线程数

    2024年02月15日
    浏览(32)
  • SpringBoot+内置Tomcat配置,参数调优,最大并发量,最大连接数

    SpringBoot开发最大的好处是简化配置,内置了Tomcat, 在SpringBoot2.0.x版本中内置Tomcat版本是8.5.x,SpringBoot内置Tomcat的默认设置中,Tomcat的等待队列长度默认是100,Tomcat的最小工作线程数默认分配10,Tomcat的最大线程数是200,最大连接数是10000,至于最大并发量和最大连接数,常常理

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包