最近看了深入理解Linux网络,里面写的测试单机百万个TCP连接还是很好玩的

于是想自己测试一下,我就用熟悉的 Go 来写,然后也记录一下我遇到的一些问题

1. 内核参数修改

  1. 服务器可打开最大文件数句柄
#vim /etc/sysctl.conf
fs.file-max=1100000 
fs.nr_open=1100000 
#sysctl -p 使之生效
#sysctl -a 查看是否生效
  1. 修改用户最大可打开文件数量
#vim /etc/security/limits.conf
root  soft  nofile  1010000  
root  hard  nofile  1010000
重进终端

这里就遇到问题了,ubuntu 系统如果按照书中的写法 “* soft nofile 1010000”,是不生效的,需要指定用户 root 才行

  1. 调整端口可用范围
#vim /etc/sysctl.conf
net.ipv4.ip_local_port_range = 5000 65000
#sysctl -p 使之生效
#sysctl -a 查看是否生效

2. Go 语言代码

  1. 服务端

3. 查问题

服务器端连接数达到 30000 后总是会出现

tcpdump net 1.1.1.1 -w go.txt
tcpdump port 1111 -w go.txt
tcp.port==40942
tcp.flags==0x014 RST包过滤