Ollama 报 11434 端口已占用,结束进程后又自动启动
先确认监听进程由桌面应用、systemd 还是容器托管。已有服务正常时直接使用;需要前台调试时停止正确的托管入口,再核对监听和实际推理。
运行 ollama serve 时出现:
Error: listen tcp 127.0.0.1:11434: bind: address already in use
查到进程是 Ollama,结束它后再运行,端口却又被占用。先检查有没有后台服务在维护这个进程。官方 issue #707 中,维护者说明 macOS 桌面应用会重新启动服务,Linux 安装也可能已经创建 systemd 服务;报告者随后确认原来的服务可以正常使用。
这个案例来自 2023 年 10 月,问题是重复启动,不代表某个当前版本的模型损坏。以下处理针对本机 macOS 和使用 systemd 的 Linux;Docker 部署另查容器归属。
先认清监听者
在 macOS 查看监听端口和 PID:
lsof -nP -iTCP:11434 -sTCP:LISTEN
Linux 可以查看:
sudo ss -ltnp 'sport = :11434'
systemctl status ollama --no-pager
systemctl show ollama -p MainPID -p ExecStart
不带权限的进程列表可能看不到其他用户的进程。确认 PID 后,用 ps -p 实际PID -o pid,ppid,user,command 查看所属用户和父进程,别根据进程名称直接结束它。Docker 发布的宿主端口还应与 docker ps 中的 PORTS 对照。
再访问本机服务:
curl --noproxy '*' --fail --silent --show-error \
http://127.0.0.1:11434/api/version
版本接口 返回当前服务器的版本。若这个服务就是应用预期使用的实例,通常不用再启动第二个 serve。这里还需核对应用的服务地址;终端和应用指向不同端口时,一个接口成功不能证明另一个入口正常。
需要前台调试时,先停托管入口
macOS 桌面安装应从菜单栏退出 Ollama,再检查端口。通过 Homebrew 托管的安装,先查看 brew services list,确认确实有该服务再执行 brew services stop ollama。两种安装方式不能混为一谈。
在 Linux 上,确认监听 PID 属于 ollama.service,并且允许中断当前请求后:
sudo systemctl stop ollama
sudo ss -ltnp 'sport = :11434'
ollama serve
停止后仍有监听者,继续查 PID 或容器,不要反复停止同一个 unit。服务停止会中断在途请求;共享机器先确认使用者和调试窗口。
前台调试完成后用 Ctrl+C 退出,再恢复原托管服务:
sudo systemctl start ollama
systemctl status ollama --no-pager
不必为了暂时调试禁用服务开机启动,也不需要改成对所有网卡监听。
端口空出来,还不算验收完成
恢复后检查监听者属于预期服务,版本接口可访问,再让原应用发一次短推理请求。使用已经安装、适合机器资源的模型,不为验收下载大模型。需要直接检查时,可以把下面的模型名换成 ollama list 中的完整名称:
curl --noproxy '*' --fail --silent --show-error \
http://127.0.0.1:11434/api/generate \
-H 'Content-Type: application/json' \
-d '{"model":"REPLACE_WITH_INSTALLED_MODEL","prompt":"Reply with OK.","stream":false}'
生成接口 的非流式响应应有 done: true,没有 error 字段,并完成短回答。如果请求报 model not found,再核对实例和模型名;这是下一层问题,不能靠继续处理端口占用解决。


