linux 服务器上排查端口问题,最常见的需求就是:这个端口被谁占用了?对应哪个进程?
下面整理 6 种常用方法。实际工作里,ss、lsof 和 fuser 基本已经够用了。
1. 使用 ss 查看端口
推荐优先使用:
ss -lntp
参数含义:
-l 只看监听端口 -n 不解析服务名称 -t 查看 tcp -p 显示进程信息
查指定端口,例如 8080:
ss -lntp | grep 8080
可能看到:
listen 0 511 0.0.0.0:8080 0.0.0.0:* users:(("node",pid=2356,fd=20))
这里可以直接看出进程是 node,pid 是 2356。
2. 使用 netstat
老系统上经常使用:
netstat -lntp
查 8080:
netstat -lntp | grep 8080
如果提示:
netstat: command not found
说明系统没有安装 net-tools。
debian、ubuntu 可以安装:
apt install net-tools
现在的新系统更推荐使用 ss,因为它速度更快,而且通常默认就有。
3. 使用 lsof
lsof 可以直接根据端口找进程:
lsof -i :8080
输出可能是:
command pid user fd type device node name node 2356 root 20u ipv4 12345 tcp *:8080 (listen)
相比 ss,这种输出更直观。
如果想看所有网络连接:
lsof -i
4. 使用 fuser
fuser 很适合快速查看某个端口对应的 pid:
fuser 8080/tcp
可能返回:
8080/tcp: 2356
想看详细信息:
fuser -v 8080/tcp
它还有一个比较直接的用法:
fuser -k 8080/tcp
这会直接结束占用 8080 端口的进程。
生产环境不要随便执行,最好先确认进程身份。
5. 使用 ps 配合 pid
如果已经知道 pid,比如:
2356
可以进一步查看这个进程:
ps -fp 2356
或者:
ps aux | grep 2356
这样可以确认它到底是 node.js、java、nginx,还是其他程序。
还可以查看完整启动命令:
cat /proc/2356/cmdline
这一步在服务器上很有用,因为同一种程序可能同时运行多个实例。
6. 查看 /proc 网络信息
如果系统环境非常精简,也可以直接从 /proc 查看:
cat /proc/net/tcp
不过这里面的端口是十六进制格式,可读性比较差。
比如 8080 转换成十六进制是:
1f90
所以这种方式更适合底层排查,日常使用没必要优先考虑。
平时用哪个命令最方便?
日常排查我一般直接用:
ss -lntp | grep 8080
如果想快速看清进程信息:
lsof -i :8080
知道 pid 后继续确认:
ps -fp pid
如果确定进程可以结束,再执行:
kill pid
不要一上来就:
kill -9 pid
因为端口后面可能跑的是正式服务。
总体来说,ss 适合快速查询,lsof 适合看进程,fuser 适合直接处理端口。掌握这三个命令,绝大多数 linux 端口占用问题都能很快定位。
到此这篇关于linux查看端口占用的6种常用方法的文章就介绍到这了,更多相关linux查看端口占用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论