Linux端口占用排查:一眼锁定进程
linux查看端口占用情况
在 Linux 系统中,查看端口占用情况是服务器运维、应用排查、故障定位中非常常见的操作。比如网站无法启动、服务冲突、端口被未知进程占用、Nginx 或 Tomcat 无法监听指定端口时,都需要先确认哪个进程正在使用该端口。下面介绍几种常用且高效的方法。
一、使用 ss 命令查看端口占用
ss 是 Linux 中推荐使用的网络状态查看工具,相比老牌的 netstat,它通常更快、更轻量。
查看 TCP 端口占用情况:
ss -tulnp
参数说明:
-t:查看 TCP 连接-u:查看 UDP 连接-l:只显示监听状态的端口-n:不解析域名,直接显示 IP 和端口-p:显示占用端口的进程信息
例如:
ss -tulnp | grep :80
可以查看 80 端口被哪个进程占用。
如果看到类似输出:
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
说明 80 端口由 nginx 进程占用,进程 PID 是 1234。
二、使用 netstat 命令查看端口占用
虽然 netstat 在很多新系统中逐渐被 ss 替代,但它仍然非常常用。
查看监听端口:
netstat -tulnp
查看指定端口:
netstat -tulnp | grep :3306
如果 3306 端口被 MySQL 占用,通常会看到类似信息:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5678/mysqld
其中 5678 是进程 PID,mysqld 是进程名称。
三、使用 lsof 命令查看端口占用
lsof 可以查看系统中被进程打开的文件、网络连接等信息,也常用于查看端口占用。
查看指定端口:
lsof -i :8080
查看 TCP 端口:
lsof -i tcp:8080
查看 UDP 端口:
lsof -i udp:53
示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2048 root 23u IPv6 12345 0t0 TCP *:8080 (LISTEN)
说明 8080 端口被 java 进程占用,PID 是 2048。
四、使用 fuser 命令查看端口占用
fuser 可以快速查看某个端口对应的进程。
查看 TCP 端口:
fuser -n tcp 8080
查看 UDP 端口:
fuser -n udp 53
如果想显示更详细信息:
fuser -v -n tcp 8080
输出中会显示用户、PID、访问类型等信息。
五、查看端口占用并结束进程
如果确认某个端口被不需要的进程占用,可以根据 PID 结束该进程。
例如使用 lsof 查到 PID 为 2048:
kill 2048
如果进程无法正常结束,可以强制结束:
kill -9 2048
也可以通过命令组合直接结束占用端口的进程:
fuser -k 8080/tcp
注意:结束进程前一定要确认该进程是否重要,避免误杀数据库、Web 服务或系统关键服务。
六、查看监听地址的含义
查看端口占用时,经常会看到以下几种地址:
0.0.0.0:80
表示监听本机所有 IPv4 地址的 80 端口,外部网络可能可以访问。
127.0.0.1:3306
表示只监听本地回环地址,通常只允许本机访问。
[::]:443
表示监听 IPv6 地址的 443 端口,有些服务也会同时兼容 IPv4。
理解监听地址有助于判断服务是否暴露在外网,以及是否存在安全风险。
七、常见问题排查思路
当服务无法启动时,可以按照以下顺序排查:
- 查看指定端口是否被占用:
ss -tulnp | grep :端口号
- 查看占用进程的 PID 和名称:
lsof -i :端口号
- 确认进程是否属于当前服务:
ps -ef | grep PID
- 如果确认是冲突进程,可以停止或重启相关服务。
例如停止 Nginx:
systemctl stop nginx
停止 Apache:
systemctl stop httpd
八、常用命令汇总
| 目的 | 命令 |
|---|---|
| 查看所有监听端口 | ss -tulnp |
| 查看 TCP 端口 | ss -tnlp |
| 查看 UDP 端口 | ss -unlp |
| 查看指定端口 | ss -tulnp \| grep :8080 |
| 使用 netstat 查看 | netstat -tulnp |
| 使用 lsof 查看 | lsof -i :8080 |
| 使用 fuser 查看 | fuser -n tcp 8080 |
| 结束占用端口的进程 | fuser -k 8080/tcp |
总结
Linux 查看端口占用情况常用 ss、netstat、lsof 和 fuser 等命令。其中 ss -tulnp 适合快速查看监听端口和对应进程,lsof -i :端口号 适合精确定位某个端口,fuser 则适合快速查看或结束占用端口的进程。掌握这些方法后,可以高效处理端口冲突、服务无法启动、网络连接异常等常见问题。