本文主要介绍如何使用netty实现C100K级别的并发长连接
Socket五元组
理论上,客户端IP与端口,服务端IP与端口以及通讯协议(TCP|UDP)构成了一个连接的五元组。改变其中任何一个元素都可以新建一个连接。如果想要单台机器或者两台机器模拟数十万的连接数,仅仅靠系统分配的端口数目是不够的,我们必须要改变其中的IP元素。本文采取的方式是利用linux的secondary ip机制,为服务端分配多个IP,理论上最多可以分配(2^32-1)个IP,连接数目可达2^16 * IP数目,远远超出我们的目标连接数。
调整系统参数限制
端口范围检查
lg@lenove:~$ sudo sysctl --all | grep port_range
net.ipv4.ip_local_port_range = 10000 60000 //有5w可用
tcp设置检查
lg@lenove:~$ sudo sysctl --all | grep tw_reuse
net.ipv4.tcp_tw_reuse = 1 //允许将TIME-WAIT sockets重新用于新的TCP连接,优化客户端处理能力
检查系统文件句柄限制
lg@lenove:~$ ulimit -Hn
1000000 //100w
左右互博:单机模拟100k并发
配置secondary ip, 这里配了20个,理论上可以支持100W个TCP连接(20个IP*5w个端口)
lg@lenove:~$ seq 20 | xargs -i sudo ip addr add 127.0.1.{}/8 dev lo
lg@lenove:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 127.0.1.1/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.2/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.3/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.4/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.5/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.6/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.7/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.8/8 scope host secondary lo
valid_lft forever preferred_lft forever
inet 127.0.1.9/8 scope host secondary lo
valid_lft forever pr