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

打印 上一主题 下一主题

主题 866|帖子 866|积分 2608

Linux体系中端口冲突占用的事常常发生,怎样排查解决呢?
本文先容怎样检察端口占用、分析进程,以及怎样释放端口或停止相关进程。
同时先容相关工具的使用: ss lsof

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

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

2. 检察端口占用

1. 使用 netstat 检察端口占用

netstat 是一个经典工具,可以检察网络毗连和端口使用情况。


  • 检察所有正在监听的端口:
    1. netstat -tuln
    复制代码
选项说明:


  • -t:显示 TCP 毗连
  • -u:显示 UDP 毗连
  • -l:仅显示监听状态的端口
  • -n:显示数字情势的地址和端口(避免剖析为主机名)
输出示例:
  1. Proto Recv-Q Send-Q Local Address           Foreign Address         State
  2. tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
  3. tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
复制代码
说明:


  • 0.0.0.0:80 表示本地 80 端口正在监听(HTTP 服务)。
  • State 为 LISTEN,表示正在等待毗连。
2. 使用 ss 替换 netstat

ss 是现代 Linux 体系中更高效的工具,用于检察网络状态。


  • 检察所有监听的端口:
    1. ss -tuln
    复制代码
3. 检察特定端口的占用

如果你知道某个端口号(如 80),可以直接过滤检察:
  1. netstat -tuln
  2. | grep :80
复制代码
或使用 ss:
  1. ss -tuln
  2. | grep :80
复制代码

3. 查找端口对应的进程

1. 使用 lsof

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


  • 检察特定端口的占用:
    1. lsof -i :80
    复制代码
    输出示例:
    1. COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    2. nginx     1234  root   6u   IPv4  12345      0t0  TCP *:80 (LISTEN)
    复制代码
    说明:

    • COMMAND 是占用端口的进程名称。
    • PID 是进程 ID。
    • USER 是运行该进程的用户。
    • NAME 显示了监听的协媾和端口号。

2. 使用 netstat 或 ss 检察进程

netstat 和 ss 也可以显示端口对应的进程信息。


  • 使用 netstat:
    1. netstat -tuln
    2. p
    复制代码
    选项 -p 会显示进程信息。
  • 使用 ss:
    1. ss -tuln
    2. p
    复制代码
输出示例:
  1. 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 是专门用于检察进程占用的工具。


  • 检察特定端口占用的进程:
    1. fuser 80/tcp
    复制代码
    输出示例:
    1. 80/tcp:  1234
    复制代码
    表示端口 80 被进程 ID 1234 占用。

4. 停止占用端口的进程

1. 使用 kill 命令



  • 查找到进程 ID 后,可以使用 kill 命令停止进程:
    1. kill -9 1234
    复制代码
    其中,-9 强制停止进程。
2. 使用 fuser 直接释放端口

fuser 可以直接杀死占用端口的进程:
  1. fuser -k 80/tcp
复制代码

5. 高级分析工具

1. 使用 htop
或 top 检察进程


如果想通过交互式界面分析进程,可以使用 htop
或 top:
  1. htop
复制代码
在界面中按 F3 搜刮进程名称或 PID。
2. 使用 tcpdump 分析流量

当端口被占用时,可能需要分析流量泉源。tcpdump 是一个流量捕获工具:
  1. tcpdump -i eth0 port 80
复制代码
这会捕获通过网卡 eth0 上的端口 80 的数据包。

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

案例1:服务无法启动,可能是端口被占用


  • 检察服务日志,发现 80 端口已被占用。
  • 使用 lsof 检查端口:
    1. lsof -i :80
    复制代码
    输出:
    1. COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    2. apache2   1234  root   6u   IPv4  12345      0t0  TCP *:80 (LISTEN)
    复制代码
  • 使用 kill 停止进程:
    1. kill -9 1234
    复制代码
案例2:多个进程监听相同端口


  • 使用 ss 检查所有监听端口:
    1. ss -tuln
    2. p
    复制代码
  • 发现多个进程绑定了端口(例如,nginx 和 apache2 同时尝试监听 443 端口)。
  • 修改其中一个服务的配置文件,将其绑定到其他端口(如 8443)。

7. 常见命令速查表

功能命令检察监听端口netstat -tuln
或 ss -tuln
检察特定端口占用lsof -i :port 或 fuser port/tcp显示端口对应进程netstat -tuln
p 或 ss -tuln
p强制释放端口fuser -k port/tcp捕获流量分析tcpdump -i interface port port_number
通过以上命令和工具,可以快速定位并解决端口占用问题,保障服务正常运行。建议优先使用现代工具(如 ss 和 lsof)来代替较老的 netstat,并团结 fuser 等工具举行高效处理惩罚。
相关参考:https://www.azfum.com/archives/llvfdeq7/

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表