Linux(服务器编程):百万并发服务器系统参数调优( 七 )
< LISTEN_PORT_COUNT; ++i){close(listened[i]);} return 0;}
- 第二步:
- 修改客户端程序mul_port_client_epoll.c , 将其MAX_PORT宏修改为5即可 , 修改完成之后 , 其就会向5个服务端都发起连接
- 修改完成之后重新编译
文章插图备注(必看)
- 此处出错的场景在实际开发中是不会出现的 , 因为在实际生活中 , 不会出现一个系统中有上万的客户端(IP都一致) , 因此出现了这种“五元组”组合用尽的情况
- 在实际中 , 每个客户端的IP地址都是不同的 , 因此它们的“五元组”类型都是不同的 , 因此就不会出现这种因为端口被用完从而导致“五元组”组合被用尽的情况
- 修改完成之后进行下面的第3次测试
- 左侧运行服务端程序reactor(111.229.177.161:8888) , 右侧运行两个客户端程序mul_port_client_epoll去连接服务器
- 效果如下:
- 左侧服务端持续接收客户端的连接
- 右侧两个客户端向服务端发起连接 , 但是当两个客户端都连接到64999的时候 , 客户端不动了 , 阻塞了(程序没有报错 , 也没有退出)
- 左侧服务端也跟着阻塞了(程序没有报错 , 也没有退出)
- 过了一小会之后 , 客户端显示连接超时 , 然后程序退出
文章插图
文章插图原因分析
- nf_conntrack_max限制了每一个程序可以建立的TCP的连接的最大数目(是连接数目 , 而不是套接字描述符的个数)
- 我们只需要修改客户端的内核参数nf_conntrack_max就可以 , 可以将其修改为1048576
- 第一步:nf_conntrack_max参数默认是不开启的 , 需要先加载下面的内核模块 , 加载完成之后其值默认为65536
文章插图- 第二步:然后在客户端的/etc/sysctl.conf配置文件中将nf_conntrack_max设置为1048576
文章插图- 第三步:调用sysctl命令将/etc/sysctl.conf配置文件的内容更新到/proc/sys/net/nf_conntrack_max中
文章插图备注一下
- 与第3次测试类似 , 在实际过程中也不会出现这个问题 , 因为不可能有一个客户端程序会发起上万个连接 , 因为此处我们是测试 , 所以程序要发起上万个测试 , 才修改这个参数
- 修改完成之后进行第4次测试
- 左侧运行服务端程序reactor(111.229.177.161:8888) , 右侧运行两个客户端程序mul_port_client_epoll去连接服务器
- 效果如下:
- 左侧服务端持续接收客户端的连接
- 右侧两个客户端向服务端发起连接 , 但是当两个客户端都连接到140999个的时候 , 客户端显示无法分配地址 , 从而程序退出
- 左侧服务端没有报错 , 只是没有客户端再连接进来了
文章插图
推荐阅读
- Git服务器配置错误导致日产汽车源码在网上泄露
- 机器人|万州区举办“中国梦科技梦”机器人编程大赛
- Linux Kernel 5.10.5发布:禁用FBCON加速滚动特性
- Linux 5.11开始围绕PCI Express 6.0进行早期准备
- Fedora正在寻求协助 希望加快Linux 5.10 LTS内核测试进度
- Linux Mint 20.1 Ulyssa稳定版已确定延期至2021年初发布
- 英特尔Xe GPU在Linux 5.11上的性能表现不错
- MIPS架构厂商日渐式微 Linux报告其漏洞遭遇困难
- 手把手配置HLS流媒体服务器
- 2020年科技十大“翻车”现场:谷歌服务器真的有点累了……
