从502错误到随机端口冲突:一次Linux服务故障定位

发布于:2024-12-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

从502错误到随机端口冲突:一次Linux服务故障定位

故障现象

客户反馈A测试平台服务异常,F12查看接口/request/api/view/info返回502错误,日志如下

caused by : org.redisson.RedissonshutdownException :Redisson is shutdown

错误为Redission is shutdown,初步怀疑为Redis 异常。

通过测试 Redis 6329 端口并执行key 查询操作,一切正常。问题仍不定期复现,增加了故障排查难度。

通过开启 A 服务的调试日志,进一步追踪发现日志

PortInUseException: Port 20004 is already  in use
20004 

端口被占用,导致返回信息错误。

通过ss 命令分析发现,20004 端口被系统上B服务进程占用。

图片

问题根因和解决措施

检查Linux的操作系统内核参数net.ipv4.ip_local_port_range

[root@localhost ~]# sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 10000 64999

问题清楚了,系统默认的随机端口范围被扩展到 10000-65000,从而导致占用了服务使用的端口号。

内核参数net.ipv4.ip_local_port_range详解

net.ipv4.ip_local_port_range定义了系统分配给客户端TCP或UDP套接字的临时端口范围(即随机端口)。
随机端口通常用于服务之间的短连接,比如在HTTP请求、数据库交互等场景中,当客户端发起请求但未指定端口号时,系统会在此范围内分配一个可用端口。

调优
默认范围
32768 到 60999(RFC 标准推荐)。
调优场景
当服务对外请求或短连接过多时,随机端口可能耗尽,需要合理扩展范围,通常调整到32768-65535。

解决方案

1、查看当前配置:

sysctl net.ipv4.ip_local_port_range

2、临时生效:

sysctl -w net.ipv4.ip_local_port_range="32768 65535"

3、永久生效(编辑/etc/sysctl.conf):

net.ipv4.ip_local_port_range = 32768 65535

4、执行sysctl -p生效

通过以上措施,故障解决,修改Linux内核参数还是要谨慎,否者可能会导致各种意想不到的问题


网站公告

今日签到

点亮在社区的每一天
去签到