linux-防止服务端口被占用

前言

linux-防止服务端口被占用

在高并发的服务器上,会发现你的服务监听端口会被占用,导致服务启动不了。

通过日志查看,发现address already in use


linux-防止服务端口被占用

原因及快速解决

1、被其他服务占用了监听端口,这时候就要选择哪个服务要使用这个端口了,其中一个修改成其他端口就可以正常启动了。

通过ss或者netstat查看监听端口的程序

ss -lntp | grep 5666

2、被随机端口占用了。linux作为客户端的时候,在连接服务端时,系统会分配一个临时的端口用于网络连接,正好所要监听的端口被选做临时端口,导致服务启动不了。这时候最快的方法就是服务修改一个端口,尝试重新启动,因为高并发下,不知道什么时候会释放这个端口。

通过ss或者netstat查看所有端口(p参数可以查看到程序的id名称等,需要root权限,但是速度会比较慢)

ss -anotp | grep 5666

以上的解放方法都是临时的方法,因为不确定什么时候端口就被选做临时端口了。


linux-防止服务端口被占用

保留服务监听端口

在Linux上可以通过设置内核参数来保留服务端口。

1、设置本地临时端口的范围

cat /proc/sys/net/ipv4/ip_local_port_range

3276860999 (第一个是开始端口,后面一个是结束端口)

对应的sysctl.conf的参数:

sudo sysctl -a | grep ip_local_port_range

net.ipv4.ip_local_port_range = 3276860999

可以根据自己的需要设置端口范围。

2、预留端口配置

cat /proc/sys/net/ipv4/ip_local_reserved_ports

5666,10050,11020-11030 (可支持逗号分隔的多个数字和范围)

对应的sysctl.conf的参数:

sudo sysctl -a | grep ip_local_reserved_ports

net.ipv4.ip_local_reserved_ports = 5666,10050,11020-11030

这个参数如果写到/etc/sysctl.conf,需要执行sysctl -p进行生效。但是就算是生效了,端口也不是马上释放的,需要等程序自动释放掉了。


¥29.8
领1元券

总结

为了高并发的情况下,有足够的端口可以使用,一般将本地临时端口范围设置比较大,因此ip_local_port_range就有可能包含了我们服务端口,这时候就需要配合ip_local_reserved_ports使用,把需要保留的端口配置好。

相关推荐