linux下设置ip_local_port_range参数

in 互联网技术 with 0 comment  访问: 17,466 次

在对于繁忙的网络服务器,如代理服务器或负载平衡器,我们可能需要增加网络端口范围来增强它的处理能力。

在Linux上,有一个sysctl参数ip_local_port_range,可用于定义网络连接可用作其源(本地)端口的最小和最大端口的限制,同时适用于TCP和UDP连接。

查看当前系统开放端口范围,命令如下:

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

要么:

# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 61000

如上命令显示"最小最大值",因此新连接的本地端口将介于32768和61000之间,默认情况下28232个随机端口,看起来很多,但在繁忙的流量服务器的时候可能很容易达到这个限制。

对于繁忙的流量服务器,可以如下操作增加随机端口范围。

# sysctl -w net.ipv4.ip_local_port_range="15000 64000"
net.ipv4.ip_local_port_range = 15000 64000

或者直接通过使用echo直接传递值给/proc目录下的文件。

echo "15000 64000" > /proc/sys/net/ipv4/ip_local_port_range

如果想要持久生效,并且重启不会失效,请将配置保存在/etc/sysctl.conf的配置文件中。

# cat /etc/sysctl.d/net.ipv4.ip_local_port_range.conf
net.ipv4.ip_local_port_range = 15000 65000

要了解服务器当前处理的会话数,请使用如下命令查看:

# ss -s
Total: 2933 (kernel 3131)
TCP:   43915 (estab 2655, closed 41080, orphaned 159, synrecv 0, timewait 41080/0), ports 30347

Transport Total     IP        IPv6
*     3131      -         -
RAW   0         0         0
UDP   17        11        6
TCP   2835      2832      3
INET      2852      2843      9
FRAG      0         0         0

# netstat -anp | more
...
tcp        0      0 10.50.1.6:41205        10.50.1.10:80           TIME_WAIT   -
tcp        0      0 10.50.1.6:42515        10.50.1.10:80           TIME_WAIT   -
tcp        0      0 10.50.1.6:59845        10.50.1.10:80           TIME_WAIT   -

请注意增加TCP端口范围,但有限制!

TIPS: 如果服务器有较多程序开放端口,请注意程序的端口开放范围,以避免随机端口跟设置的端口范围冲突。

比如如下场景:

1. 多服务程序在一台机器,会造成有的服务启动监听端口跟系统开放的端口范围冲突
2. 比如有的服务随机端口去连接zookeeper,如果这个随机端口跟本机服务监听的端口冲突的话,就造成次服务连接zookeeper失败,从而会造成你意想不到的服务故障发生

如上的一些场景尽量避免,可以根据业务情况设置不同的开放端口范围。

WeZan