0

0

大量 ESTABLISHED 连接残留但进程已退出导致端口耗尽的批量清理脚本

冰川箭仙

冰川箭仙

发布时间:2026-01-29 19:03:08

|

319人浏览过

|

来源于php中文网

原创

答案是连接已无用户态进程持有但内核尚未回收,需通过比对/proc/net/tcp的inode与/proc/[pid]/fd确认孤儿连接后用ss -K清理。

大量 established 连接残留但进程已退出导致端口耗尽的批量清理脚本

为什么 netstat 看到大量 ESTABLISHED 但 ps 找不到对应进程

这通常不是连接“残留”,而是连接状态未被内核及时回收:进程已退出,但 TCP 连接仍处于 ESTABLISHED 状态(常见于未正确关闭 socket、子进程继承 fd 后父进程提前退出、或使用了 SO_LINGER 且 linger 时间设为 0 但对端未响应 FIN)。此时连接实际已无用户态持有者,但内核尚未释放 socket 结构体,/proc/net/tcp 里仍显示该条目,且占用本地端口 —— 导致新服务无法 bind 成功。

如何安全识别并批量清理“孤儿 ESTABLISHED 连接”

不能直接 kill 或强制 reset,必须先确认连接确实无主。关键判断依据是:/proc/net/tcp 中的 inode 列值,在 /proc/[pid]/fd/ 下无任何进程引用它。

  • awk '{print $10}' /proc/net/tcp | sort -u 提取所有活跃连接的 inode 号(跳过表头)
  • 遍历 /proc/[0-9]*/fd/,用 readlink 检查每个 fd 是否指向这些 inode;未被引用的即为孤儿
  • 真正可清理的是那些 inode 不在任何 /proc/[pid]/fd/ 中出现的连接 —— 此时内核会允许通过 ss 强制删除
  • 务必加 --no-dns-n 参数避免解析延迟和误判

一行命令快速清理(生产环境慎用,建议先 dry-run)

以下脚本只处理本地监听端口(如 8080、3000)上处于 ESTABLISHED 但无对应进程的连接:

ss -tn state established '( sport = :8080 or sport = :3000 )' | awk 'NR>1 {print $5}' | cut -d',' -f1 | cut -d':' -f1 | while read ip; do ss -K dst $ip; done

说明:ss -K 是内核级强制中断连接,比 kill -9 更底层,不依赖进程存在;但会触发 RST 包,客户端收到连接异常中断。若需更精细控制,应先用 ss -tulnlsof -i :8080 交叉验证端口占用情况,再决定是否清理。

Magician
Magician

Figma插件,AI生成图标、图片和UX文案

下载

为什么不能用 killall -u nobodypkill -f python 解决这个问题

因为问题根本不在进程存活,而在 socket 生命周期脱离进程管理。杀进程对已退出的“僵尸连接”完全无效;而误杀正在运行的服务进程反而会导致真实业务中断。更危险的是:某些容器环境(如 Docker + PID namespace)中,ps 看不到宿主机侧的进程映射,但连接仍在,此时盲目按用户或名字 kill 会破坏整个容器编排状态。

真正要盯住的是 /proc/net/tcpinode 字段与各进程 fd 目录的交集 —— 这个检查逻辑没法绕过,跳过它直接清理,等于在没确认尸体身份的情况下火化。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.09.27

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

391

2023.09.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

220

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

192

2025.07.04

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。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

500

2024.04.08

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

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

401

2024.04.08

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

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

439

2024.04.08

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

19

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

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

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