Workerman启动时提示端口被占用但查不到进程怎么处理

冬枫酱_1524

冬枫酱_1524

2026-08-10

791人浏览

原创

“Address already in use”却查不到占用进程,说明端口被内核残留状态(如TIME_WAIT堆积、孤儿socket)占用;应先用ss -tuln确认监听状态,若pid=0则需启用SO_REUSEADDR、清理TIME_WAIT或重启网络服务。

workerman启动时提示端口被占用但查不到进程怎么处理

Workerman启动时报“Address already in use”却用lsof或netstat查不到占用进程,说明端口可能被内核残留状态、僵尸socket或未显示PID的系统服务占着,不是常规用户进程在跑。

先确认端口是否真被监听

执行ss -tuln | grep :端口号(如ss -tuln | grep :2345),比netstat更底层、更可靠。如果输出为空,说明内核根本没监听,Workerman压根没起来——别急着杀进程,先看日志。

如果输出类似tcp LISTEN 0 128 *:2345 *:* users:(("php",pid=0,fd=6))且pid=0,这就是关键信号:【内核已分配端口但无对应用户进程】,通常是TIME_WAIT堆积或SO_REUSEADDR未启用导致的假占用。

检查TIME_WAIT连接是否卡死

执行ss -tan state time-wait | grep :端口号 | wc -l,若返回值大于100,说明大量旧连接还没释放完,新bind会失败。

Blogcast™
Blogcast™

Blogcast是一款把博客文章转换为自然语音音频的 AI 文本转语音工具。

下载

临时缓解:在Workerman启动脚本的Worker初始化前加一行$worker->context['so_reuseaddr'] = true;,让socket复用地址。这步必须加在new Worker()之后、Worker::runAll()之前,否则无效。

注意:Linux默认开启net.ipv4.tcp_tw_reuse,但Workerman不自动继承该参数,不手动设context就不起作用。

强制清理内核级残留绑定

方法一:重启网络子系统(仅限测试环境)
执行sudo systemctl restart networking(Debian/Ubuntu)或sudo systemctl restart network(CentOS/RHEL),可清空所有未关联进程的监听状态。

方法二:重置本地端口范围并刷新连接表
运行echo 32768 65535 > /proc/sys/net/ipv4/ip_local_port_range → sudo sysctl -w net.ipv4.tcp_fin_timeout=30 → sudo ss -napi | head -20确认输出变短。

方法三:直接换端口启动(最快验证手段)
修改new Worker('tcp://0.0.0.0:2345')为new Worker('tcp://0.0.0.0:2346'),保存后执行php start.php start。如果成功,证明原端口确属内核级残留,非程序冲突。

排查Docker或WSL虚拟网卡干扰

第一步:查宿主机是否开了Docker Desktop或WSL2
执行ip addr show | grep -E "(docker|veth|wsl)",若有输出,说明虚拟网卡可能劫持了端口绑定。

第二步:临时禁用相关服务
Docker用户运行sudo systemctl stop docker;WSL2用户在PowerShell中执行wsl --shutdown,再试Workerman启动。

第三步:若确定是虚拟网卡问题,改用tcp://127.0.0.1:2345绑定(仅本地调试)或在Docker run时加--network host模式绕过NAT层。

终极手段:从内核模块层面释放

① 查当前端口绑定的inode号:ss -tulnep | grep :端口号,记下括号里的inode值(如ino:12345678)
② 定位该inode对应的文件:find /proc/*/fd -lname "socket:[12345678]" 2>/dev/null
③ 若返回为空,说明该socket已无进程关联,属于孤儿状态
④ 执行sudo sysctl -w net.ipv4.tcp_fin_timeout=15 → 等待30秒 → 再次ss -tuln | grep :端口号确认消失
⑤ 启动Workerman

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
开发工具有哪些
开发工具有哪些

开发工具有:1、集成开发环境IDE;2、版本控制系统VCS;3、自动化构建工具;4、测试工具;5、代码分析工具。本专题为大家提供开发工具有哪些的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3026

5

Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

2026.05.20

206

15

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

2026.05.20

222

12

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

2026.05.20

227

13

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

20

14

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习