端口占用查看
总结
- 查端口占用三板斧:
lsof -i:端口、netstat -ntlp | grep 端口、ss -tlnp | grep 端口 ss是netstat的现代替代品,速度更快,新系统优先用ss- 找到 PID 后用
kill -9 PID强制终止,或kill -15 PID优雅终止 - 防火墙端口操作用
firewall-cmd,开放端口后记得--reload生效
1. 查看端口占用
lsof(最直接)
# 查看指定端口被哪个进程占用
lsof -i:8080
# 同时查看多个端口
lsof -i:8080 -i:9090
# 只看 TCP
lsof -i tcp:8080
# 只看 UDP
lsof -i udp:8080
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1234 root 87u IPv6 12345 0t0 TCP *:8080 (LISTEN)
netstat
# 查看所有 TCP 监听端口
netstat -ntlp
# 查看指定端口
netstat -ntulp | grep 8080
# 查看所有连接(含 UDP)
netstat -ntulp
参数说明:
| 参数 | 含义 |
|---|---|
-t |
只显示 TCP 连接 |
-u |
只显示 UDP 连接 |
-n |
禁用域名解析,加快查询 |
-l |
只显示正在监听的端口 |
-p |
显示进程 PID 和名称 |
ss(推荐,netstat 的现代替代)
ss 比 netstat 速度更快,新系统优先用这个:
# 查看所有 TCP 监听端口
ss -tlnp
# 查看指定端口
ss -tlnp | grep 8080
# 查看所有连接状态
ss -s
2. 终止占用端口的进程
# 找到 PID
lsof -i:8080
# 优雅终止(给进程处理退出的机会)
kill -15 <PID>
# 强制终止(进程不响应时用)
kill -9 <PID>
# 一步到位:找到并杀掉占用 8080 的进程
kill -9 $(lsof -t -i:8080)
# 按进程名终止
pkill -f java
killall java
3. 防火墙端口管理(firewalld)
# 查询端口是否开放
firewall-cmd --zone=public --query-port=8080/tcp
# 开放端口(临时,重启失效)
firewall-cmd --zone=public --add-port=8080/tcp
# 开放端口(永久)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 关闭端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
# 重新加载配置(--permanent 操作后必须执行)
firewall-cmd --reload
# 查看所有已开放的端口
firewall-cmd --zone=public --list-ports
# 查看防火墙状态
firewall-cmd --state
4. 常用场景
服务启动失败提示端口被占用
# 1. 找到占用进程
lsof -i:8080
# 或
ss -tlnp | grep 8080
# 2. 确认是否可以终止
ps -p <PID> -o pid,user,cmd
# 3. 终止进程
kill -9 <PID>
查看某个进程监听了哪些端口
# 通过进程名查
ss -tlnp | grep java
# 通过 PID 查
lsof -p <PID> -i
查看端口连接数(排查连接堆积)
# 统计各状态的 TCP 连接数
ss -s
# 查看 8080 端口的所有连接及状态
ss -tnp | grep 8080
# 统计 ESTABLISHED 连接数
ss -tn | grep ESTABLISHED | wc -l