问题描述:
业务遇到这个情况,在启动服务时,出现8049端口被占用而无法启动。
问题分析:
netstat -an | grep "8049"
lsof -i:8049
8049端口被该服务器上的客户端随机选取源端口给占用掉了。
解决方案:
net.ipv4.ip_local_port_range是系统设置了随机使用的端口范围 例如1024 65000
这时想用8049就得更改它的范围,改为8050 65000 显然这就减少了很多随机端口,如果需要大量端口就会有瓶颈。
所有最好的方法是net.ipv4.ip_local_port_range范围不变 1024 65000
通过ip_local_reserved_ports设置预留端口,告诉系统不要使用这些端口作为随机端口使用,就避免了设置ip_local_port_range的浪费情况
最好是将服务监听的端口以逗号分隔全部添加到ip_local_reserved_ports中,TCP/IP协议栈从ip_local_port_range中随机选取源端口时,会排除ip_local_reserved_ports中定义的端口,因此就不会出现端口被占用了服务无法启动。
vim /etc/sysctl.conf
net.ipv4.ip_local_reserved_ports = 8049,9000-9100
sysctl -p