在 Linux 服务器上部署服务(如 Python / vLLM / Web / 模型推理)时,经常会遇到 端口被占用、服务起不来 的问题。本文总结一套 完整、实用、可复现 的端口排查方法。


一、查看服务器所有被占用的端口(核心命令)

✅ 推荐方式:ss(替代 netstat,速度更快)

ss -tunlp

参数说明:

参数含义
-tTCP
-uUDP
-n不解析域名(更快)
-l仅显示监听中的端口(LISTEN)
-p显示占用端口的进程

示例输出:

tcp LISTEN 0 2048 0.0.0.0:8014 0.0.0.0:* users:(("python3.10",pid=1482552,fd=49))

👉 表示:python3.10 进程(PID=1482552)正在监听 8014 端口


二、按端口号排序查看(你博客的重点命令 ⭐)

ss -tunlp | sort -k5

说明:

  • -k5:按第 5 列(Local Address:Port)排序

  • 适合端口多、服务多的服务器

  • 一眼就能看出端口分布情况(如 8000~9000)


三、只看 TCP / UDP 监听端口(常用精简版)

1️⃣ 只看 TCP

ss -tlnp

2️⃣ 只看 UDP

ss -ulnp

四、精确查询某一个端口是否被占用

方式一:ss

ss -lntp | grep ':8014'

方式二:lsof

lsof -i :8014

示例输出:

python3.10 1482552 hc 49u IPv4 ... TCP *:8014 (LISTEN)

五、通过端口找到“具体运行的程序”

1️⃣ 根据 PID 查看完整启动命令(最关键)

ps -fp 1482552

或(不被截断,最准确):

cat /proc/1482552/cmdline | tr '\0' ' '

可以看到:

  • 启动的脚本(如 deploy.py)

  • 模型路径

  • 端口参数 --port

  • 推理后端(vllm / torch / etc)


2️⃣ 查看进程的工作目录(定位项目)

ls -l /proc/1482552/cwd

六、查看端口是否正在被使用(连接情况)

ss -antp | grep ':8014'

常见状态说明:

状态含义
LISTEN端口被占用
ESTABLISHED正在被客户端访问
TIME-WAIT历史连接,不算占用

⚠️ 是否能释放端口,关键看 LISTEN,不是 ESTABLISHED


七、关闭端口的正确姿势(重要)

✅ 结论

端口属于 PID,不属于 PPID

正确操作流程:

# 优雅关闭(推荐)
kill <PID>

# 强制关闭(最后手段)
kill -9 <PID>

❌ 不建议随意 kill PPID(父进程),可能会误杀多个服务。


八、常见排雷总结

  • 端口冲突 ≠ 程序冲突,本质是 bind 失败

  • LISTEN 才是真正占用端口

  • Docker / vLLM / 多实例部署会同时占用多个端口

  • GPU 推理服务起不来,有时是 显存不足,而不是端口问题


九、推荐记住的“黄金命令组合” ⭐

# 1. 查看所有监听端口(并排序)
ss -tunlp | sort -k5

# 2. 查具体端口
ss -lntp | grep ':PORT'

# 3. 定位程序
ps -fp PID

十、结语

通过 ss + lsof + ps 的组合,可以在 1 分钟内完成端口 → 进程 → 项目 → 是否可关闭 的完整定位,非常适合服务器排障和模型部署场景。

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐