Phoenix Framework端口异常:重启需频繁更换端口问题求助
解决Phoenix项目端口占用无法复用问题
1. 排查TIME_WAIT连接
Mac上端口显示占用但找不到对应进程,多数是TCP连接处于TIME_WAIT状态未释放。用以下命令确认:
# 查看指定端口的连接状态 sudo lsof -i :<你的端口号> # 过滤出该端口的TIME_WAIT连接 netstat -an | grep TIME_WAIT | grep <你的端口号>
2. 调整系统TCP参数加速端口释放
编辑/etc/sysctl.conf(无则新建),添加以下配置缩短连接等待时长:
net.inet.tcp.msl=1000 net.inet.tcp.finwait2_timeout=1500 net.inet.tcp.fast_finwait2_recycle=1
执行命令让配置立即生效:
sudo sysctl -w net.inet.tcp.msl=1000 sudo sysctl -w net.inet.tcp.finwait2_timeout=1500 sudo sysctl -w net.inet.tcp.fast_finwait2_recycle=1
3. 配置Phoenix Endpoint允许端口重用
在config/dev.exs的Endpoint配置中,添加端口重用选项:
config :project, ProjectWeb.Endpoint, http: [ port: 4000, # 替换为你的端口 options: [ reuseaddr: true, reuseport: true ] ], # 保留原有其他配置...
该配置让Phoenix依赖的Ranch服务器允许复用处于TIME_WAIT状态的端口。
4. 确保应用正常退出
- 开发环境下用
Ctrl+C正常终止mix phx.server,避免强行杀死进程导致端口未释放 - 若需强制清理,可杀死所有Erlang虚拟机残留进程:
pkill -9 beam.smp
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

