tcp连接数

Tcp 连接中,Server 监听固定端口,Client 发起主动连接。 经过三次握手后建立 Tcp 连接。

Client

client 每次请求,如果不固定端口,系统会选用一个空闲端口。该端口是独占,不能和其他 Tcp 连接共享。本地端口最大数为 65536 ,0 有特殊含义(预留,系统指定动态生成的端口),其他的全作为 client 情况下 ,最大连接数为65535 。 除去系统服务使用的端口,能够使用的会比这个少一些,1024 一下的端口通常为保留端口。

#Server

server 固定监听某个本地端口,等待 Client 连接。

实际 tcp 连接数

tcp 的连接数大小,和mem_max 、 tpc_men 的的设置有关,tcp_men 三个值,没有内存压力、进入内存压力阶段、拒绝分配 socket 。 实际上还有一些其他的参数 比如和 buffer 有关的。

每个 socket 内存占用

Linux 中每个 TCP 连接最少占用多少内存? 结论是 3.155KB

socket 内存占用参数

linux 内核参数优化

Linux内核 TCP/IP、Socket参数调优

wmem_max 最大 socket 写 buffer

rmem_max 最大 socket 读 buffer

tcp_rmen tcp 读 buffer

tcp_wmen tcp 写 buffer

如下图绘制出了相关参数所在的位置。

每个 tcp 占用一个文件描述符

  • 进程限制

    • 一个进程最多只能打开 ulimit -n 个文件,默认为 1024 ,如果使用默认最多只有 1024 个并发

      1
      2
      #  /etc/rc.local   
      ulimit -SHN 1000000 #百万文件描述符

      or

      1
      2
      3
      # /etc/security/limits.conf
      * soft nofile 1000000
      * hard nofile 1000000
  • 全局限制

    /proc/sys/fs/file-nr ,分别是 已经分配的文件句柄、分配没使用的,最大文件句柄

    1
    2
    $ cat /proc/sys/fs/file-nr
    1440 0 784243

​ 也就是这里的最大文件句柄是 784243

​ 修改 /etc/sysctl.conf

1
2
3
fs.file-max = 1000000       # 系统所有进程能够打开的数量限制    
net.ipv4.ip_conntrack_max = 1000000
net.ipv4.netfilter.ip_conntrack_max = 1000000
作者

张巍

发布于

2020-01-10

更新于

2022-04-22

许可协议

评论