You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:12:09