登录 |

TCP连接数不够用?

2013年08月2日 下午 00:36 | 作者:

一个TCP连接四元组,唯一确定一条TCP连接,只要IP四元组不冲突,就能创建连接。
client_ip:client_port – server_ip:server_port

可以创建多少连接?

php-fpm(192.168.1.100) → memcached(127.0.0.1:11211)
↓
mysql(192.168.1.200:3306)
  1. php-fpm(127.0.0.1) → memcached(127.0.0.1)
    由于连接本地环回地址,故而client_id=server_ip=127.0.0.1,只有client端口号可以在[1~65535]之间动态变化,
    IP四元组可变范围:127.0.0.1:[1~65535] – 127.0.0.1:[11211]
    【连接相同IP的一个服务端口】能建立65535-1条连接,因为源地址和目地址不能相等!127.0.0.1:11211 → 127.0.0.1:11211。
  2. php-fpm(192.168.1.100) → memcached(192.168.2.100)
    由于mysql在网段192.168.1.0,故而使用同网段IP与之建立连接,
    IP四元组可变范围:192.168.1.100:[1~65535] – 192.168.1.200:[3306]
    【连接不同IP的一个服务端口】能建立65535条连接。

连接数受限于:

  1. 客户端:动态端口范围(默认32768-61000)
    net.ipv4.ip_local_port_range = 1024 65535
  2. 服务端/客户端:最大文件描述符
    1. /proc/sys/fs/nr_open(linux 2.6.25 默认1000000)
      echo 2000000 > /proc/sys/fs/nr_open
    2. /etc/security/limits.conf
      admin    soft    nofile  2000000
      admin    hard    nofile  2000000

参考:

  1. tcp的65535个连接之迷
  2. http长连接200万尝试及调优