1. 背景

linux服务器启动时,会对指定的端口进行监听bind,如果同一个机器上这个端口已经被使用,则监听失败,程序无法启动。

linux客户端连接服务器accept时,系统会分配本地临时端口用于网络连接。

目前是”大混部”的时代,一台物理机可能会部署多个服务,如果端口号设置不好,很可能会出现端口被其他程序占用的情况。

2. 解决方法

针对我的linux机器看看

本地临时端口配置(2个数: start, end)

cat /proc/sys/net/ipv4/ip_local_port_range 
32768	61000 

 预留端口配置(可支持逗号分隔的多个数字,比如10000, 10005-10010)

cat /proc/sys/net/ipv4/ip_local_reserved_ports 

 如下面参考链接说的,有2种方法:

(1) 修改临时端口范围 ip_local_port_range,因为一个程序的端口问题修改一个机器的临时端口范围,明显减少了临时端口的使用量。代价大。

(2) 修改预留端口ip_local_reserved_ports,即使没有发生冲突也可以预先设置,防止后续端口被占用。

贴一下参考链接里面的英文

ip_local_reserved_ports解释如下: 
ip_local_reserved_ports - list of comma separated ranges 
Specify the ports which are reserved for known third-party 
applications. These ports will not be used by automatic port 
assignments (e.g. when calling connect() or bind() with port 
number 0). Explicit port allocation behavior is unchanged. 
 
The format used for both input and output is a comma separated 
list of ranges (e.g. "1,2-4,10-10" for ports 1, 2, 3, 4 and 
10). Writing to the file will clear all previously reserved 
ports and update the current list with the one given in the 
input.
发布评论
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

C++ 并发编程,std::unique_lock与std::lock_guard区别示例讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。