前言
在项目中写了一个MQTT的客户端小程序,用于测试MQTTServer的连接数上限,运行了一段时间后报错:Cannot assign requested address
网上查了下"Cannot assign requested address"指的是linux系统无法继续为客户端分配端口了(已用尽),所以无法进行监理socket连接。
定位问题
1. 查看当前linux系统的可分配端口
cat /proc/sys/net/ipv4/ip_local_port_range
当前系统的端口数范围为20000~65534, 所以能分配的端口数为25535。如果我的连接数达到了25535个,就会报如上错误。
那么该如何调整这个端口范围呢?
解决方法
1. 修改端口范围
执行:vim /etc/sysctl.conf,添加如下内容
#1000到65534可供用户程序使用,1000以下为系统保留端口 net.ipv4.ip_local_port_range = 1000 65534
执行:sysctl -p
再次查看端口范围:cat /proc/sys/net/ipv4/ip_local_port_range
2. 配置tcp端口的重用配置,提高端口的回收效率
执行:vim /etc/sysctl.conf,添加如下内容:
#TCP connection recovery
net.ipv4.tcp_max_tw_buckets = 6000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.route.max_size = 5242880
net.ipv4.ip_forward = 1
net.ipv4.tcp_timestamps = 1
博主:测试生财
座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务*。
csdn:https://blog.csdn.net/ccgshigao