Linux端口占用排查终止进程释放端口

Linux系统中端口冲突占用的事经常发生,如何排查解决呢?
本文介绍如何查看端口占用、分析进程,以及如何释放端口或终止相关进程。
同时介绍相关工具的使用: ss lsof


1. 什么是端口及端口占用

端口是网络通信的入口,每个端口对应一个唯一的端口号,用于区分不同的服务(如 HTTP 的 80 端口,SSH 的 22 端口)。当一个服务监听某个端口时,其他进程就无法使用该端口,因此端口冲突会导致服务启动失败。


2. 查看端口占用

1. 使用 netstat 查看端口占用

netstat 是一个经典工具,可以查看网络连接和端口使用情况。

  • 查看所有正在监听的端口:
    netstat -tuln
    

选项说明:

  • -t:显示 TCP 连接
  • -u:显示 UDP 连接
  • -l:仅显示监听状态的端口
  • -n:显示数字形式的地址和端口(避免解析为主机名)

输出示例:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

说明:

  • 0.0.0.0:80 表示本地 80 端口正在监听(HTTP 服务)。
  • StateLISTEN,表示正在等待连接。
2. 使用 ss 替代 netstat

ss 是现代 Linux 系统中更高效的工具,用于查看网络状态。

  • 查看所有监听的端口:
    ss -tuln
    
3. 查看特定端口的占用

如果你知道某个端口号(如 80),可以直接过滤查看:

netstat -tuln | grep :80

或使用 ss

ss -tuln | grep :80

3. 查找端口对应的进程

1. 使用 lsof

lsof 是一个强大的工具,用于查看文件或端口的占用情况。

  • 查看特定端口的占用:

    lsof -i :80
    

    输出示例:

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx     1234  root   6u   IPv4  12345      0t0  TCP *:80 (LISTEN)
    

    说明:

    • COMMAND 是占用端口的进程名称。
    • PID 是进程 ID。
    • USER 是运行该进程的用户。
    • NAME 显示了监听的协议和端口号。
2. 使用 netstatss 查看进程

netstatss 也可以显示端口对应的进程信息。

  • 使用 netstat

    netstat -tulnp
    

    选项 -p 会显示进程信息。

  • 使用 ss

    ss -tulnp
    

输出示例:

tcp    LISTEN   0    128    0.0.0.0:80   0.0.0.0:*   users:(("nginx",pid=1234,fd=6))

说明:

  • users:(("nginx",pid=1234,fd=6)) 表示端口 80 被 nginx 进程(PID 为 1234)占用。
3. 使用 fuser

fuser 是专门用于查看进程占用的工具。

  • 查看特定端口占用的进程:

    fuser 80/tcp
    

    输出示例:

    80/tcp:  1234
    

    表示端口 80 被进程 ID 1234 占用。


4. 终止占用端口的进程

1. 使用 kill 命令
  • 查找到进程 ID 后,可以使用 kill 命令终止进程:

    kill -9 1234
    

    其中,-9 强制终止进程。

2. 使用 fuser 直接释放端口

fuser 可以直接杀死占用端口的进程:

fuser -k 80/tcp

5. 高级分析工具

1. 使用 htoptop 查看进程

如果想通过交互式界面分析进程,可以使用 htoptop

htop

在界面中按 F3 搜索进程名称或 PID。

2. 使用 tcpdump 分析流量

当端口被占用时,可能需要分析流量来源。tcpdump 是一个流量捕获工具:

tcpdump -i eth0 port 80

这会捕获通过网卡 eth0 上的端口 80 的数据包。


6. 实战案例:排查端口占用问题

案例1:服务无法启动,可能是端口被占用
  1. 查看服务日志,发现 80 端口已被占用。

  2. 使用 lsof 检查端口:

    lsof -i :80
    

    输出:

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    apache2   1234  root   6u   IPv4  12345      0t0  TCP *:80 (LISTEN)
    
  3. 使用 kill 终止进程:

    kill -9 1234
    
案例2:多个进程监听相同端口
  1. 使用 ss 检查所有监听端口:
    ss -tulnp
    
  2. 发现多个进程绑定了端口(例如,nginxapache2 同时尝试监听 443 端口)。
  3. 修改其中一个服务的配置文件,将其绑定到其他端口(如 8443)。

7. 常见命令速查表

功能命令
查看监听端口netstat -tulnss -tuln
查看特定端口占用lsof -i :portfuser port/tcp
显示端口对应进程netstat -tulnpss -tulnp
强制释放端口fuser -k port/tcp
捕获流量分析tcpdump -i interface port port_number

通过以上命令和工具,可以快速定位并解决端口占用问题,保障服务正常运行。建议优先使用现代工具(如 sslsof)来代替较老的 netstat,并结合 fuser 等工具进行高效处理。
相关参考:https://www.azfum.com/archives/llvfdeq7/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值