0

0

net.ipv4.ip_local_port_range 调到最大后还是端口耗尽的隐藏进程

舞夢輝影

舞夢輝影

发布时间:2026-01-23 19:35:23

|

534人浏览过

|

来源于php中文网

原创

端口耗尽主因常是TIME_WAIT堆积、短连接风暴或隐藏进程占端口,而非ip_local_port_range过小;应使用ss -tulnp、lsof、/proc/net/{tcp,tcp6}精准排查,启用tcp_tw_reuse、慎调fin_timeout,并检查systemd用户实例、残留容器及内核socket异常。

net.ipv4.ip_local_port_range 调到最大后还是端口耗尽的隐藏进程

端口耗尽问题不一定是 net.ipv4.ip_local_port_range 设置不够大,更可能是系统中存在大量未释放的 TIME_WAIT 连接、短连接风暴、或被忽略的后台进程持续占着端口(尤其是非 root 进程绑定固定端口后长期不退出)。

检查真实端口占用情况,别只看 netstat -an

默认 netstatss 不显示 PID 和进程名,容易漏掉“隐身”进程:

  • ss -tulnp(需 root 权限)查所有监听和已建立连接的进程,重点关注 :*:*:*:* 类型的监听和大量 TIME-WAIT 状态
  • lsof -i -P -n | grep ':' 查特定端口归属,比如怀疑某端口被霸占时精准定位
  • cat /proc/net/{tcp,tcp6} 手动解析(十六进制端口号需转换),适合排查内核级或容器逃逸类异常进程

TIME_WAIT 不是敌人,但配置不当会雪上加霜

调大本地端口范围只是治标。Linux 默认 net.ipv4.tcp_fin_timeout = 60,而 TIME_WAIT 持续 2×MSL(通常 60 秒),若每秒新建 1000+ 短连接,60 秒内就可能占满 65535 个端口:

抖云猫AI论文助手
抖云猫AI论文助手

一款AI论文写作工具,最快 2 分钟,生成 3.5 万字论文。论文可插入表格、代码、公式、图表,依托自研学术抖云猫大模型,生成论文具备严谨的学术专业性。

下载
  • 启用端口重用:net.ipv4.tcp_tw_reuse = 1(客户端主动发起连接时可复用处于 TIME_WAIT 的端口)
  • 谨慎调低超时:net.ipv4.tcp_fin_timeout = 30(仅对非 NAT 环境安全;NAT 下可能丢包)
  • 禁用回收(不推荐):net.ipv4.tcp_tw_recycle = 0(已在 4.12+ 内核移除,且在 NAT 场景下会导致连接失败)

揪出“隐藏进程”:systemd、容器、孤儿线程

真正耗尽端口的常不是前台服务,而是以下几类:

  • systemd 用户实例残留:执行 loginctl list-users + systemctl --user list-units --state=running,查看是否有崩溃后未清理的用户级服务占着 8080/9000 等常用端口
  • 容器未彻底退出:运行 docker ps -apodman ps -a,检查 Exited 容器是否仍持有网络命名空间(用 nsenter -n -t ss -tuln 进入其 netns 查看)
  • 僵尸 socket 或内核模块:极少数情况下,驱动或 eBPF 程序创建的 socket 未正确释放,可通过 cat /proc/net/sockstat 对比 sockets: usedtcp: 行数值是否严重失衡

验证与收尾建议

改完参数后别直接重启,先验证:

  • 确认生效:sysctl net.ipv4.ip_local_port_rangess -s 中 “TCP: time wait” 数量趋势
  • 压力测试对比:ab -n 10000 -c 100 http://127.0.0.1:8080/ 前后分别记录 netstat -an | grep :8080 | wc -l
  • 设为持久:把调整项写入 /etc/sysctl.d/99-custom.conf,避免重启失效

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

393

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

574

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

257

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

400

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

438

2024.04.08

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

386

2023.11.09

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号